Subodule Git add: Một thư mục git được tìm thấy cục bộ


189

Tôi thực sự đang cố gắng học cách sử dụng git, bao gồm cả các git submoduletiểu ban. Tôi đã thiết lập một máy chủ mà tôi có thể lưu trữ, đẩy và kéo kho git bằng cách sử dụng SSH. Tôi đã tạo một kho lưu trữ git chính "Travail" trên máy chủ này, trong đó tôi muốn đặt tất cả các dự án của mình dưới dạng mô hình con.

Trong kho lưu trữ Travail của tôi, tôi đã thêm một dự án của tôi dưới dạng mô hình con tại tools/libft: Tôi có thể phát triển mô hình con này, để đẩy và kéo nó.

Nhưng khi tôi cố gắng thêm một mô hình con khác (được đặt tên là fdf, từ fdf.git trên máy chủ của tôi), tôi gặp vấn đề sau:

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

Một thư mục git cho 'projets / fdf' được tìm thấy cục bộ với remote (s): origin ssh: //git@XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git Nếu bạn muốn sử dụng lại git cục bộ này thư mục thay vì nhân bản lại từ ssh: //XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git sử dụng tùy chọn '--force'. Nếu thư mục git cục bộ không phải là repo chính xác hoặc bạn không chắc điều này có nghĩa là chọn tên khác với tùy chọn '--name'.

Thực tế không có thư mục con trong projets/

Tôi đọc trên một luồng khác mà tôi nên sử dụng git submodule synchoặc chỉnh sửa tệp .gitmodules trong đó URL tới kho lưu trữ gốc của mô hình con của tôi có thể đã thay đổi.

Nhưng tệp .gitmodules của tôi chỉ chứa thông tin về mô hình con đầu tiên của tôi (tools / libft), không phải về projets / fdf:

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://git@XXX.XXX.XXX.XXX:XXXXX/opt/git/libft.git

Là một sinh viên Pháp, tôi có thể đã bỏ lỡ điều gì đó trong tài liệu tiếng Anh mà tôi có, nhưng tôi đã tìm kiếm và tôi thực sự không hiểu tại sao tôi lại gặp phải vấn đề này.

Tôi sẽ rất vui nếu tôi nhận được một giải pháp nhưng chỉ cần một lời giải thích cũng hữu ích.


Một sửa chữa nhỏ: đó là 'kho lưu trữ', không phải 'lưu ký'. Không thực sự là một câu trả lời, nhưng nếu các dự án độc lập với nhau, sẽ tốt hơn cho mỗi dự án có repo riêng thay vì mô đun con.
jcm

Cảm ơn bạn, tôi đã sửa chữa. Tôi biết nhưng tôi muốn tập hợp tất cả công việc của mình trong cùng một repo nhưng là các dự án riêng biệt. Đó là một lựa chọn để giữ cho toàn bộ công việc của tôi được cập nhật khi tôi đi từ nhà đến trường và ngược lại (và để tìm hiểu cách sử dụng các công cụ này, tôi tò mò;))
vmonteco

Chà, tò mò luôn là một lý do tốt! :) Điều đó lạ thật. Bạn có chắc là bạn chưa thêm mô hình con trước không?
jcm

Không có trong Travail /, và tôi không có vấn đề gì để sao chép fdf.git trong ~ /. Trong Travail / tôi không tìm thấy dấu vết nào của fdf. chỉ libft: /
vmonteco

5
Oh chờ đợi, tôi nhìn vào /Travail/.git/modules/projets/và tôi tìm thấy một fdfthư mục. Điều này dường như không phải trong cây làm việc mà trong các cam kết cũ. Nó có thể tạo ra vấn đề?
vmonteco

Câu trả lời:


435

Tôi đã đến bài viết SO này để cố gắng thêm một mô hình con có cùng đường dẫn với một mô hình con mà tôi đã xóa gần đây.

Đây là những gì cuối cùng đã làm việc cho tôi ( bài viết này đã giúp rất nhiều ):

Nếu bạn chưa chạy git rm --cached path_to_submodule(không có dấu gạch chéo) cũng như rm -rf path_to_submodule, hãy làm điều đó!

Sau đó:

  1. Xóa các dòng có liên quan từ các .gitmodulestập tin. ví dụ xóa những thứ này:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. Xóa phần có liên quan khỏi .git / config. ví dụ xóa những thứ này:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

Sau đó, bạn cuối cùng có thể:

git submodule add https://github.com/path_to_submodule


47
Điều này thực sự hữu ích, vì tôi không thể tìm thấy thứ gì khác hiệu quả. Sự khác biệt chính từ các đề xuất khác là bước 3 của bạn. Cảm ơn!
AndroidDev

8
Bước 2 & 3 là cần thiết cho tôi.
U007D

8
Bước 3 là cần thiết cho tôi, nhưng tại sao mô hình con cũng tồn tại ở đó?
Crt

1
Đối với tôi, tôi đã bỏ qua bước 1 & 2 (đã có cài đặt chính xác trong đó) và bước 3 đã sửa nó cho tôi. (Tôi đã thực hiện bước đầu tiên git rmrm -rfcác bước.)
Rock Lee

2
Ngay cả bước 3 cũng không hiệu quả với tôi. Tôi chỉ có một mô hình con nên tôi đã xóa toàn bộ .git/modulesvà kết thúc hoạt động.
ach

47

tôi đã thử giải pháp của jbmilgrom, cụ thể là tôi đã thử git rm --cachevà nó không hoạt động với tôi vì thư mục / mô hình con không có ở đó. Những gì làm việc cho tôi là:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

Tôi đã làm điều này sau khi thử --forcetrong các git submodulelệnh và rmtất cả các thư mục khác, đẩy lên thành chủ, v.v ... thư mục không tồn tại và không có lý do gì cho bộ đệm. Hóa ra .git/modulesđó là lỗi nằm ở đâu.


15

Bạn có thể đã xóa 'projets/fdf'đĩa của mình, nhưng kho Git của bạn vẫn có nó. Sử dụng git rm -rf projets/fdfđể xóa nó khỏi Git, sau đó cam kết thay đổi. Sau đó, bạn sẽ có thể thêm thư mục này dưới dạng mô hình con.


Nó hoạt động :) Cảm ơn bạn. Tôi nghĩ rằng tôi thực sự đã phạm sai lầm này.
vmonteco

21
Tôi được bảo rằng thư mục không tồn tại khi tôi làm điều này. Có vẻ như cả hai tồn tại và không: /
Nathan Hornby

40
@ tom-mcfarlin Cuối cùng, ngay lập tức xóa các dòng khỏi .gitmodule và một thư mục từ .git / mô-đun, sau đó nó cho tôi thêm một mô hình con mới. Có lẽ có cách tốt hơn để làm điều này, nhưng tôi đã hết thời gian. Nếu bạn đi theo con đường này, tôi khuyên bạn nên tạo một bản sao lưu tốt và xin đừng đổ lỗi cho tôi, nếu nó không đúng với bạn. Chúc may mắn.
Sparklos 30/03/2015

5
Cảm ơn bạn, tôi đã tìm thấy trên một bài đăng khác để xóa thư mục khỏi .git / mô-đun và điều đó làm việc cho tôi. Có nghĩa là những gì lỗi đã nói là xung đột ... Tôi chỉ không biết về thư mục đó
Tom McFarlin

10
@NathanHornby @Sparklos @TomMcFarlin - Trong các phiên bản gần đây của git, bạn sẽ thấy rằng git-subodule thêm một thư mục trong thư mục .git. Ví dụ, nếu bạn đang ở trong thư mục /tmp/repo, sau đó chạy git submodule add ../otherrepo.git, thì bạn sẽ thấy /tmp/repo/.git/modules/otherrepothư mục đó tồn tại. Đó là những gì vấn đề đã cho tôi. Tôi đã xóa thủ công thư mục đó khỏi .git và mọi thứ đều hoạt động.
Alexander Bird

13

Nếu bạn đã xóa thư mục mô đun con, như tôi đã làm, hãy làm theo các hướng dẫn còn lại của jbmilgrom. Chìa khóa là rm -rf .git/modules/path_to_submodulenhưng hãy tiếp tục và sao lưu toàn bộ thư mục repo cha của bạn trước .

Nếu bạn chỉ có một mô hình con, chỉ cần xóa .gitmodules


2

Hai lệnh này hoạt động với tôi.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf

Điều này. Dường như có hai cách để các mô hình con được tạo ra. Trong một trong số đó, thư mục con sẽ chỉ có một tệp .git duy nhất trỏ đến một thư mục trong siêu dự án, bắt đầu bằng .git/modules/. Trong đó có một thư mục lưu trữ kho lưu trữ cho mô hình con. Xóa kho lưu trữ đó đã khắc phục sự cố cho tôi, trong khi câu trả lời được chấp nhận thì không.
William Randokun
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.