2011-11-19 40 views
26

Tôi cố gắng để cập nhật các môđun con của git repositary này nhưng tôi tiếp tục nhận được một lỗi nghiêm trọng:Lỗi Fatal khi cập nhật submodule sử dụng GIT

[[email protected] ProdigyView]# git submodule update --recursive 
Cloning into core... 
Permission denied (publickey). 
fatal: The remote end hung up unexpectedly 
Clone of '[email protected]:ProdigyView/ProdigyView-Core.git' into submodule path 'core' failed 

Hoặc cách này

[[email protected] root]# git clone --recursive https://github.com/ProdigyView/ProdigyView.git 
Cloning into ProdigyView... 
remote: Counting objects: 438, done. 
remote: Compressing objects: 100% (275/275), done. 
remote: Total 438 (delta 172), reused 394 (delta 128) 
Receiving objects: 100% (438/438), 8.03 MiB | 5.19 MiB/s, done. 
Resolving deltas: 100% (172/172), done. 
Submodule 'core' ([email protected]:ProdigyView/ProdigyView-Core.git) registered for path 'core' 
Cloning into core... 
Permission denied (publickey). 
fatal: The remote end hung up unexpectedly 
Clone of '[email protected]:ProdigyView/ProdigyView-Core.git' into submodule path 'core' failed 

Bất kỳ ý tưởng về việc tại sao điều này đang xảy ra với submodule? Repo là một trong những điều này:

https://github.com/ProdigyView/ProdigyView

(các submodule có thể được nhân bản nếu tôi không cố gắng sao chép nó như là một submodule.)

+1

Nếu điều đó có thể hữu ích, việc thêm khóa công khai vào github đã thực hiện công việc cho tôi. –

Trả lời

-4

đặn nó ra. Đường dẫn trong các tệp .gitmodule không thể tải xuống mô-đun con.

+7

Tôi đang gặp vấn đề tương tự. Bạn có thể giải thích về những gì đã sai và cách bạn sửa nó không? –

+0

Đây là cách tôi đã giải quyết vấn đề này: Trong tệp .gitmodules và .git/config, bạn sẽ thấy đường dẫn url cho mô-đun con mà bạn muốn cập nhật. Nếu nó giống như git @ github ... hãy thay đổi nó thành url hợp lệ: git // github.com/.... nó sẽ giải quyết vấn đề. –

+2

Câu trả lời này không rõ ràng. Đề xuất của Khune Vu cũng không giải quyết được vấn đề. – awolf

59

Vấn đề là git không thể tìm thấy khóa công khai cần thiết để tải xuống repo từ máy chủ của bạn, giải pháp là sử dụng url công khai.

Trong tập tin .gitmodule bạn sẽ tìm thấy các mục sau đây:

[submodule "example"] 
    path = example 
    url = [email protected]:webhat/example.git 

URL cần phải được thay đổi để URL công cộng cho các mô-đun:

[submodule "example"] 
    path = example 
    url = https://github.com/webhat/example.git 

Như bạn có thể thấy các tiền tố git @ đã được đổi thành https: // và mã thông báo : trở thành /

EDIT: Trong kho riêng của bạn, bạn có thể cần phải sử dụng git:// hơn https://

Câu trả lời trước đó không rõ ràng đối với tôi, vì vậy tôi thêm này.

EDIT 2: Nếu bạn tìm thấy bạn cần phải chạy git submodule sync hoặc cần phải chỉnh sửa .git/config để có được điều này để làm việc, bạn đã có thể thiết lập điều khiển từ xa cho các môđun con.

+2

Tôi đã gặp phải vấn đề tương tự ngày hôm nay và Github dường như chỉ cung cấp bản sao công khai qua HTTPS nowadasy. URL trong ví dụ của bạn sẽ là 'https: // github.com/webhat/example.git' rồi – bfncs

+0

@boundaryfunctions cập nhật –

+1

Cảm ơn phản ứng nhanh, đã bình chọn. – bfncs

29

Nếu nó có thể giúp một số người:

tôi cập nhật .gitmodules tôi

[submodule "example"] 
    path = example 
    url = https://github.com/webhat/example.git 

Sau đó, tôi cập nhật .git tôi/config quá

[submodule "example"] 
    url = https://github.com/webhat/example.git 

Giống như một số bạn nói nó trước (và tôi cảm ơn bạn).

Sau đó, tôi cập nhật.git/modules/example/config

[remote "origin"] 
    fetch = [...] 
    url = https://github.com/webhat/example.git 

Và để kết thúc tôi làm

git submodule sync 
git submodule init 
git submodule update 
+0

đây là một giải pháp hoàn chỉnh :) – almaruf

1

Tôi có vấn đề này như vậy. Tuy nhiên, trong trường hợp của tôi, nhóm muốn để sử dụng quyền truy cập SSH từ các tệp .gitmodules, do đó việc sửa đổi URL để sử dụng http: // không phải là một tùy chọn.

Cuối cùng, sự cố của tôi có tệp ~/.ssh/config không chính xác. Các tập tin cấu hình đã có một số cài đặt sai lầm, vì vậy tôi đã thực sự cố gắng truy cập vào máy chủ không chính xác mỗi khi tôi thực sự muốn truy cập [email protected] Tôi thấy điều này ra bằng cách thực hiện lệnh sau:

ssh -vT [email protected] 

Dòng thứ ba hoặc lâu hơn nên nói điều này:

debug1: Connection to github.com [<ip address>] port <port num> 

Nếu bạn không cố gắng để kết nối với github.com, sau đó tập tin cấu hình của bạn đang chỉ bạn ra khỏi khóa học.

Hóa ra tôi không cần bất kỳ thứ gì trong tệp cấu hình của mình, vì vậy tôi đã an toàn để xóa nó. Nếu bạn muốn duy trì một tập tin cấu hình, đây là một bài viết tốt trên rằng:

http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/

Ngoài ra, các tài liệu GitHub thực sự giúp tôi gỡ rối vấn đề của tôi:

https://help.github.com/articles/error-permission-denied-publickey

https://help.github.com/articles/what-ip-addresses-does-github-use-that-i-should-whitelist

1

Các bước sau sẽ khắc phục sự cố.

  1. Xóa thư mục của mô-đun con trên máy cục bộ của bạn.
  2. Do git submodule sync
  3. sau đó git submodule update --init

Hope this helps.

3

Bạn có thể tự vượt qua trong những quan trọng trong xây dựng -> "Execute vỏ" của Jenkins công việc:

ssh-agent bash -c 'ssh-add {path_to_private_key}; git submodule update --init --recursive'

Ví dụ:

ssh-agent bash -c 'ssh-add /var/lib/jenkins/.ssh/jenkins_rsa; git submodule update --init --recursive'

+0

Điều này thực sự hữu ích. Ngay cả trên máy Windows cố gắng để chỉ git submodule cập nhật cho phép bạn truy cập bị từ chối, bởi vì không có khóa thực sự được sử dụng. –

0

này đã xảy ra nhiều thời gian cho tôi mà tôi đặt một chức năng trong của tôi.bash_profile (hoạt động trên BSD sed/GNU/Mac):

gitfix() { 
if [ -f "./.gitmodules" ] ; then 
    sed -E -i.bak -e "s/(url *= *)(.*:)(.*)/\1https:\/\/github.com\/\3/g" .gitmodules \ 
    git submodule sync 
    git submodule update --init --recursive 
fi 
} 

Một lót:

sed -E -i.bak -e "s/(url *= *)(.*:)(.*)/\1https:\/\/github.com\/\3/g" .gitmodules ; git submodule sync ; git submodule update --init --recursive 

tìm kiếm vim/thay thế:

%s/\(url\s*=\s*\)\(.*:\)\(.*\)/\1https:\/\/github.com\/\3/ 

giải pháp tiềm ẩn dựa trên câu trả lời Daniel 's

Các vấn đề liên quan