2012-04-03 33 views
7

Đầu tiên: xin lỗi cho tiêu đề câu hỏi, tôi thực sự không biết vấn đề là gì nên tôi không biết hỏi về nó như thế nào.Git dường như không muốn giữ nguyên nguồn gốc địa phương về nguồn gốc/chủ

Tôi muốn phân biệt chủ của mình với tổng thể ngược dòng (phải là nguồn gốc/chính, dựa trên cách điều khiển từ xa của tôi được thiết lập).

Nhưng: nguồn gốc đã được đặt ở đó sau Tôi đã làm việc trên máy cục bộ trong một thời gian, do đó, nó chỉ là "xuất xứ" trong tên. Đó là: Tôi đã có một repo địa phương, đặt nó vào một thiết lập gitolite, và sau đó nói với git địa phương của tôi để gọi nó là nguồn gốc.

Đây là những triệu chứng:

$ git diff master orgin/master 
fatal: ambiguous argument 'orgin/master': unknown revision or path not in the working tree. 

$ git diff master origin/master -- 
fatal: bad revision 'origin/master' 

Hm.

$ git remote -v 
origin [email protected]:example (fetch) 
origin [email protected]:example (push) 

okay, có vẻ đúng.

$ git branch -a 
... # nothing from origin 

Hm.

$ git fetch -a origin 
From example.com:example 
* branch   HEAD  -> FETCH_HEAD 

Tôi không biết điều đó có đúng không. Có vẻ hiệu quả nhưng git diff master origin/master vẫn không thành công và:

$ git branch --track omaster origin/master 
fatal: Not a valid object name: 'origin/master'. 

Wha?

$ ls .git/refs/remotes 
gitps ps 

Điều đó có vẻ sai: đó là những điều khiển từ xa cũ chưa tồn tại trong nhiều tháng. Ngoài ra chúng còn trống. Và .git/remotes không tồn tại ở tất cả, mặc dù tôi không chắc chắn rằng nó nên.

Trả lời

10

Bạn có thể cần phải nói cho git chi nhánh nào tìm nạp từ nguồn gốc. Trong tệp .git/config cho repo này, trong phần [remote "origin"], phải có một dòng như fetch = .... Điều này cho git những gì để lấy và nơi để đặt nó tại địa phương. Dưới đây là một ví dụ khá tiêu chuẩn:

[remote "origin"] 
     fetch = +refs/heads/*:refs/remotes/origin/* 
     url = ssh://... 

Nếu bạn không nhìn thấy dòng fetch = ..., bạn có thể yên tâm thêm nó để phù hợp với ví dụ này, đó là tiêu chuẩn "theo dõi tất cả các chi nhánh và gọi cho họ nguồn gốc/chi nhánh tại địa phương "tùy chọn được thiết lập bởi git clone.

Xem git pro book để có mô tả đúng về những gì đang diễn ra.

+1

Tuyệt vời, cảm ơn! Yeah, dòng tìm nạp bị thiếu hoàn toàn. – quodlibetor

+0

Cảm ơn. Đối với tôi, dòng tìm nạp của tôi tồn tại, nhưng chỉ lấy từ một nhánh phát hành cụ thể vì một lý do nào đó. Tôi cập nhật các dòng để ở trên và đã làm 'git remote update' và sau đó' git reset --hard origin/branchname' và mọi thứ hoạt động hoàn hảo. – Phil

11

Bạn đã thử git remote update chưa? Điều này sẽ cập nhật tất cả các điều khiển từ xa, tạo ra các nhánh theo dõi từ xa khi cần thiết.

+0

Chỉ cần thử nó, chính xác kết quả tương tự như 'git fetch -a origin', thật không may. – quodlibetor

0

Tôi vừa gặp sự cố tương tự. Tôi phát hiện ra rằng thư mục .git địa phương của tôi là thực sự là một tập tin

$ file .git 
    .git: ASCII text 

Tôi đã xóa các tập tin, và khởi tạo các kho git

git init && git remote add origin "gitrepo" 

Không quá chắc chắn tại sao điều này xảy ra. Hy vọng rằng điều này có thể giúp một người nào đó ..

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