Cách hiện tại để loại bỏ mô-đun con git là gì?


91

kể từ phiên bản git 1.9.3 (Apple Git-50) trên mac, làm cách nào để xóa một mô-đun con git? Tôi đang đọc rất nhiều thông tin lỗi thời với nhiều nhà phát triển nói với tôi rằng họ sẽ không hoạt động. Cách hiện tại là gì? sẽ git deinit pathToSubModule làm các thủ thuật?

Các bước tôi nghĩ sẽ hoạt động ở đây nhưng các bình luận nói rằng họ không.

Hãy để tôi giải thích tình hình hiện tại của tôi và những gì tôi cần hoàn thành. Tôi đã cài đặt kho lưu trữ Nhanh và thêm nó vào làm mô-đun con cho dự án của mình. Mã này đã được đăng ký và những người khác đang sử dụng nó. Những gì tôi cần làm bây giờ là fork cùng một kho lưu trữ Quick và lưu trữ nó trên một github an toàn hơn mà công ty của tôi có (vì vậy một github riêng tư hoàn toàn khác). Sau khi fork nó, tôi muốn thêm fork đó dưới dạng gitSubmodule và để nó thay thế Quick submodule hiện tại mà tôi đã cài đặt trước đó.

cập nhật: tôi đã đọc rằng cách sau là đúng trên phiên bản git mới nhất, vui lòng xác nhận?

To remove a submodule added using:

git submodule add blah@blah.com:repos/blah.git lib/blah
Run:

git rm lib/blah
That's it.

For old versions of git (circa ~1.8.5) use:

git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah

Tôi đã vật lộn với các vấn đề mô-đun con trong hai ngày. Bước đột phá đã đến khi tôi tìm thấy cái này: forum.developer.apple.com/thread/13102 . Về cơ bản, Xcode và có lẽ các ứng dụng khác, phải vật lộn để mở rộng url có chứa '~'. Sau khi tôi thay đổi ssh: //username@server.remoteHost.com/~/git/MyRepo.git thành ssh: //username@server.remoteHost.com/home/username/git/MyRepo.git (tra cứu đường dẫn thực tế trên máy chủ của bạn), tất cả những điều kỳ lạ đã biến mất sau mười phút.
Elise van Looij

Câu trả lời:


193

Bạn có git submodule deinit

git submodule deinit <asubmodule>    
git rm <asubmodule>
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached <asubmodule>
rm -rf .git/modules/<asubmodule>

deinit

Bỏ đăng ký các mô-đun con đã cho, tức là xóa toàn bộsubmodule.$name
phần khỏi .git/configcùng với cây công việc của chúng.

Cuộc gọi hơn nữa để git submodule update, git submodule foreachgit submodule syncsẽ bỏ qua bất kỳ submodules không đăng ký cho đến khi chúng được khởi tạo một lần nữa, vì vậy sử dụng lệnh này nếu bạn không muốn có một kiểm tra địa phương của submodule trong cây công việc của bạn nữa.

Nếu bạn thực sự muốn xóa một mô-đun con khỏi kho lưu trữ và git rmthay vào đó cam kết sử dụng .

Nếu --forceđược chỉ định, cây công việc của mô-đun con sẽ bị loại bỏ ngay cả khi nó chứa các sửa đổi cục bộ.


8
tôi muốn xóa hoàn toàn mô-đun con cho tôi và cả những người dùng khác. Vì vậy, tất cả những gì tôi cần là git submodule deinit asubmodule; và git rm asubmodule ?? Ngoài ra, những gì về những người dùng khác đã lưu trữ mô-đun con, liệu họ có phải xóa nó sau khi kéo xuống không?
j2emanue

1
Tôi muốn xóa bản sao cục bộ của submodule và điều này hoạt động hoàn hảo, tất cả các tệp trong subir đều biến mất.
malhal

1
Bạn cũng có thể cần rm -rf <asubmodule>nếu bạn đã kiểm tra phiên bản của kho lưu trữ cơ sở chưa đăng ký mô-đun con.
Sarah Messer

6

Tôi đang sử dụng Git phiên bản 2.16.2 và git rmhầu như thực hiện tốt công việc:

git rm path-to-submodule

Bạn có thể xác minh với git statusgit diff --cachedrằng điều này phá vỡ mô-đun con và sửa đổi .gitmodulestự động. Như mọi khi, bạn cần cam kết thay đổi.

Tuy nhiên, ngay cả khi mô-đun con bị xóa khỏi kiểm soát nguồn, .git/modules/path-to-submodulevẫn chứa kho lưu trữ mô-đun con và .git/configchứa URL của nó, vì vậy bạn vẫn phải xóa chúng theo cách thủ công:

git config --remove-section submodule.path-to-submodule
rm -rf .git/modules/path-to-submodule

Giữ kho submodule và cấu hình là cố ý để bạn có thể hoàn tác việc loại bỏ với ví dụ git reset --hard.


1
câu trả lời gần đây nhất và giải pháp ngắn nhất
TurboGuma

3

Cách xóa một mô-đun con một cách an toàn.

(thêm vào https://stackoverflow.com/a/1260982/342794 )

  1. Liệt kê và xác định vị trí phần mô-đun con trong .gitmodulestệp. Nói qua thiết bị đầu cuối vi .gitmodules. Thí dụ:

    [submodule "submodules/afnetworking"]
        path = submodules/afnetworking
        url = https://github.com/CompanyName/afnetworking.git
    
  2. Các mô-đun con có thể được sử dụng với các nhánh cục bộ. Đối với các dự án đang hoạt động lâu dài, mã có thể khác với repo gốc và có thể có một số bản sửa lỗi. Bạn nên xác minh xem mã mô-đun con có trải qua các thay đổi trong quá trình dự án hay không. Ví dụ: Nhìn vào các bản ghi, nếu nó chỉ đến masternhánh hoặc một số nhánh cục bộ. khám phá nhật ký git để tìm các sửa đổi đã được thực hiện qua thiết bị đầu cuối. thường chúng được lưu trữ trong một thư mục, ví dụ của tôi, trong submodulesthư mục.

    User$ cd submodules/afnetworking
    User$ git log
    
  3. Xóa phần mô-đun con khỏi .gitmodules, lưu tệp. Ví dụ: git statuschỉ nên hiển thị sau khi đã sửa đổi

    modified:   .gitmodules
    
  4. Giai đoạn các thay đổi với git add .gitmodules.

  5. Liệt kê và xác định vị trí phần mô-đun con trong .git/configtệp. Nói qua thiết bị đầu cuối vi .git/config. Thí dụ:

    [submodule "submodules/afnetworking"]
        url = https://github.com/CompanyName/afnetworking.git
    
  6. Xóa các tệp sobmodule git cache. đang chạy git rm --cached submodules/afnetworking(không có dấu gạch chéo) sẽ xóa nó thành công. Thí dụ:

    User$ git rm --cached submodules/afnetworking
    rm 'submodules/afnetworking'    <-- terminal output
    
  7. Loại bỏ các tệp mô-đun con trong .gitthư mục với rm -rf .git/modules/.... Xác nhận nó với git statussau đó.

    User$ rm -rf .git/modules/submodules/afnetworking/
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
        modified:   .gitmodules
        deleted:    submodules/afnetworking
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    
  8. Cam kết các thay đổi. Xác nhận git statussau đó.

    User$ git commit -m "Remove submodule afnetworking"
    [feature/replace-afnetworking-submodule-with-pod 70e239222] Remove submodule afnetworking
    2 files changed, 4 deletions(-)
      delete mode 160000 submodules/afnetworking
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    nothing added to commit but untracked files present (use "git add" to track)
    
  9. Xóa các tệp mô-đun con không được theo dõi.

    User$ rm -rf submodules/afnetworking
    
  10. Xóa các tham chiếu khỏi dự án Xcode. Xây dựng, sửa chữa các vấn đề biên dịch và thời gian chạy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.