2010-10-23 24 views
6

Có một repo trần từ xa mà trên đó tôi đã đẩy nhánh từ một máy và kéo đến một máy khác.Nhận lỗi 'receive.denyCurrentBranch' khi chuyển sang chế độ Git repo trần

Đã thực hiện một số thay đổi trên máy khác, cố gắng đẩy những thay đổi đó trở lại repo trần từ xa và tôi nhận được lỗi 'receive.denyCurrentBranch'.

Điều gì đang xảy ra?

Điều này không có nghĩa vụ xảy ra trên một repo trần - không có gì được kiểm tra trên đó.

Các chi nhánh khi nhìn từ máy 2 là:

Fix 
dev1 
dev2 
remotes/origin/HEAD -> origin/dev1 
remotes/origin/Fix 
remotes/origin/dev1 
remotes/origin/dev2 
remotes/origin/master 

'Fix' là chi nhánh hiện nay trên cả hai máy dev.

Khi tôi ban đầu kéo chi nhánh trên máy 2, tôi đã làm:

git pull 
git checkout -b Fix origin/Fix 

Tôi nghi ngờ về dòng 'điều khiển từ xa' đầu tiên - Có vẻ như các HEAD nên được trỏ đến chi nhánh hiện tại của tôi, nhưng nó không phải. Nghĩ rằng tôi thiếu cái gì, ở đây ..

Cập nhật 1 tôi sáp nhập chi nhánh 'Fix' xuống đến chi nhánh dev1, và sau đó pushd của dev1 'chi nhánh - mà làm việc ok (Tôi sắp sửa làm mà, dù sao).

Vì vậy, đó là một giải pháp, nhưng tôi nghĩ vấn đề thực sự là HEAD không được gắn với nhánh hiện tại ('Fix'), mà là một nhánh không hoạt động ('dev1'). Tôi không chắc chắn làm thế nào để thay đổi đầu trên repo từ xa?

+0

Ai đó hãy sửa tôi nếu tôi sai, nhưng kho trần không được cho là có * có * HEAD.Điều đó sẽ chỉ ra rằng có một thư mục làm việc, và các điểm HEAD đến cam kết nó được dựa trên ... Bạn có chắc chắn repo từ xa là trần? – Jonathan

+0

Khá chắc chắn. Không có dự án nào được kiểm xuất và tất cả các tệp 'git' đều nằm trong thư mục cấp cao nhất của kho lưu trữ. – rickb

+0

Jonathan, kho Git trống không có HEAD, nhưng không có không gian làm việc mặc định. Một không gian làm việc vẫn có thể tồn tại cho một kho lưu trữ trống, nhưng bạn phải thông báo cho Git biết nó tồn tại ở đâu bằng biến môi trường 'GIT_WORK_TREE' hoặc tùy chọn Git' --work-tree' và vị trí của kho lưu trữ bằng biến môi trường 'GIT_DIR' hoặc tùy chọn' - -git-dir'. –

Trả lời

1

Từ Machine 2, để upload refs từ kho lưu trữ địa phương để kho từ xa mà bạn có thể sử dụng refs rõ ràng trong lệnh push:

git push origin Fix:refs/heads/Fix 

Sau đó, trong máy 1, bạn nên sử dụng lệnh lấy để có được refs xa

git fetch 

trong danh sách các chi nhánh (git branch -a), bạn sẽ tìm thấy nguồn gốc/Fix (hoặc điều khiển từ xa/gốc/Fix), bạn có thể duyệt nội dung của các chi nhánh từ xa trực tiếp bằng cách sử dụng lệnh thanh toán:

git checkout origin/Fix 

Thực hiện thay đổi của bạn, cam kết, vv ... và sau đó đẩy nó bằng cách sử dụng lệnh tương tự được sử dụng trong máy 2:

git push origin Fix:refs/heads/Fix 

Để theo dõi các chi nhánh (đây là, tạo ra một chi nhánh địa phương rằng "điểm" chi nhánh từ xa, sử dụng lệnh thanh toán với --track tùy chọn):

git checkout --track -b Fix origin/Fix 

Sau đó, bạn có thể làm việc trên chi nhánh địa phương Sửa và đẩy và kéo mà không có các đối số khác

git pull 
git commit 
git push 
Các vấn đề liên quan