2013-10-27 18 views
9

Tôi đang cố gắng để máy chủ cá nhân của mình là từ xa chính của git và tự động phản ánh điều đó với github. Tôi tìm thấy this article mà nó được chủ yếu làm việc với một kịch bản post-receive mà không git push --mirror (về cơ bản).phản ánh kho lưu trữ git tự lưu trữ tới github.com (lỗi xác thực)

Cách tiếp cận của tôi khác ở chỗ tôi muốn tránh phải tạo và bảo mật khóa triển khai và sau đó định cấu hình nó trên mọi kho lưu trữ.

Tập lệnh sau khi nhận của tôi hoạt động chính xác với hầu hết các biến thể bên dưới như được đánh dấu trong các nhận xét ngoại trừ khi tôi thực hiện chuyển hướng hoàn toàn + chuyển hướng + như trong bài viết trên blog, xác thực ngừng hoạt động.

GITHUB_USERNAME=focusaurus 
BARE_PATH=$(pwd -P) 
REPO_NAME=$(basename "${BARE_PATH}") 
REPO_URL="ssh://[email protected]/${GITHUB_USERNAME}/${REPO_NAME}" 
echo "About to mirror to ${REPO_URL}" 

#hmm, this works 
#git push --mirror "${REPO_URL}" 

#this works, too 
#nohup git push --mirror "${REPO_URL}" 

#and this also works OK 
nohup git push --mirror "${REPO_URL}" & 

#but this fails with 
#Permission denied (publickey). 
#fatal: The remote end hung up unexpectedly 
#Somehow ssh agent forwarding must get screwed up? Help me, Internet. 
#nohup git push --mirror "${REPO_URL}" &>>/tmp/mirror_to_github.log & 

#this is the one used in the blog post above but it also fails 
# nohup git push --mirror "${REPO_URL}" &>/dev/null & 

Tôi có chuyển tiếp đại lý ssh mà tôi tin là cách thức hoạt động của các phiên bản. Vậy câu hỏi của tôi là tại sao 2 biến thể cuối cùng lại không thành công với lỗi xác thực?

+0

Bạn có chắc chắn rằng sự thất bại là do những thay đổi này gây ra và không phải là điều gì khác? –

+0

Có. Tôi đã thử nghiệm tất cả những hương vị trên và theo các ý kiến, những người được đánh dấu là "hoạt động OK" làm việc đáng tin cậy, và sau đó chỉ cần thay đổi cách xử lý stdio luôn gây ra thất bại. –

+0

Vì vậy, có vẻ như vấn đề có thể là một cái gì đó trong cấu hình ssh của tôi. Đang điều tra. –

Trả lời

1

Có thể bạn có thể cố gắng đặt cờ tiết trên ssh để tìm hiểu điều gì đang xảy ra.

Bạn có thể sử dụng biến môi trường GIT_SSH để thay thế lệnh mà git sẽ sử dụng để mở kết nối ssh. Từ trang người đàn ông:

GIT_SSH 
     If this environment variable is set then git fetch and git push 
     will use this command instead of ssh when they need to connect to a 
     remote system. The $GIT_SSH command will be given exactly two 
     arguments: the [email protected] (or just host) from the URL and the 
     shell command to execute on that remote system. 

     To pass options to the program that you want to list in GIT_SSH you 
     will need to wrap the program and options into a shell script, then 
     set GIT_SSH to refer to the shell script. 

Vì vậy, một kịch bản trong /tmp/verb-ssh trông giống như:

#!/bin/bash 
/usr/bin/ssh -vvv "[email protected]" 

và sau đó thiết lập các biến môi trường GIT_SSH=/tmp/verb-ssh nên cung cấp một số thông tin gỡ lỗi hữu ích.

+0

Vâng, đó là một mẹo tuyệt vời để nhận được một số đầu ra gỡ lỗi. Tôi vẫn không thể hiểu được nguyên nhân gốc rễ nhưng tôi nghĩ rằng tôi chỉ cần đi đến KISS và để đẩy vào github ở phía trước vì nó thường nhanh chóng anyway. –

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