Những gì bạn có thể đã làm để gây ra điều này:
Điều này xảy ra khi bạn đi ra một chương trình nhỏ. Bạn sắp thay đổi thứ gì đó đã hoạt động, vì vậy bạn đã sử dụng phép thuật cấp 3 không thể xóa được vĩnh viễn:
machine1:~/proj1> git init
và bạn bắt đầu thêm / cam kết. Nhưng sau đó , dự án bắt đầu tham gia nhiều hơn và bạn muốn làm việc trên nó từ một máy tính khác (như PC hoặc máy tính xách tay ở nhà của bạn), vì vậy bạn làm một cái gì đó như
machine2:~> git clone ssh://machine1/~/proj1
và nó nhân bản và mọi thứ có vẻ tốt, và vì vậy bạn làm việc với mã của mình từ machine2.
Sau đó ... bạn cố gắng đẩy các cam kết của mình từ machine2 và bạn nhận được thông báo cảnh báo trong tiêu đề.
Lý do cho thông báo này là vì git repo mà bạn đã lấy từ đó được dự định sẽ chỉ được sử dụng cho thư mục đó trên máy1. Bạn có thể nhân bản từ nó tốt, nhưng đẩy có thể gây ra vấn đề. Cách "thích hợp" để quản lý mã ở hai vị trí khác nhau là với một repo "trần", giống như đã được đề xuất. Một repo trần không được thiết kế để có bất kỳ công việc nào được thực hiện trong đó, nó có nghĩa là phối hợp các cam kết từ nhiều nguồn. Đây là lý do tại sao câu trả lời được xếp hạng hàng đầu đề nghị xóa tất cả các tệp / thư mục khác với thư mục .git sau bạn git config --bool core.bare true
.
Làm rõ câu trả lời được xếp hạng cao nhất: Nhiều ý kiến cho câu trả lời đó có nội dung như "Tôi đã không xóa các tệp không phải .git khỏi máy1 và tôi vẫn có thể cam kết từ máy2". Đúng rồi. Tuy nhiên, bây giờ những tập tin khác đã hoàn toàn "ly dị" với repo git. Hãy thử git status
trong đó và bạn sẽ thấy một cái gì đó như "gây tử vong: Thao tác này phải được chạy trong một cây làm việc". Vì vậy, đề xuất xóa các tệp không phải để cam kết từ machine2 sẽ hoạt động ; để bạn không bị nhầm lẫn và nghĩ rằng git vẫn đang theo dõi các tệp đó. Nhưng, xóa các tệp là một vấn đề nếu bạn vẫn muốn làm việc với các tệp trên máy1, phải không?
Vì vậy, bạn thực sự nên làm gì?
Phụ thuộc vào mức độ bạn dự định vẫn hoạt động trên máy1 và máy2 ...
Nếu bạn đã hoàn tất việc phát triển từ machine1 và đã chuyển tất cả sự phát triển của mình sang machine2 ... chỉ cần làm những gì câu trả lời được xếp hạng cao nhất gợi ý: git config --bool core.bare true
và sau đó, tùy chọn, xóa tất cả các tệp / thư mục khác ngoài .git khỏi thư mục đó, vì chúng Không bị theo dõi và có thể gây nhầm lẫn.
Nếu công việc của bạn trên machine2 chỉ là việc một lần và bạn không cần tiếp tục phát triển ở đó ... thì đừng bận tâm đến việc tạo ra một repo trần; chỉ cần ftp / rsync / scp / vv. các tệp của bạn từ máy * 2 * ở trên cùng của các tệp trên máy * 1 *, cam kết / đẩy từ máy * 1 *, sau đó xóa các tệp khỏi máy * 2 *. Những người khác đã đề nghị tạo một chi nhánh, nhưng tôi nghĩ rằng điều đó hơi lộn xộn nếu bạn chỉ muốn hợp nhất một số phát triển bạn đã làm trên cơ sở một lần từ một máy khác.
Nếu bạn cần tiếp tục phát triển trên cả machine1 và machine2 ... thì bạn cần thiết lập mọi thứ đúng cách. Bạn cần chuyển đổi repo của mình thành trần, sau đó bạn cần tạo một bản sao của nó trên máy1 để bạn làm việc . Có lẽ cách nhanh nhất để làm điều này là làm
machine1:~/proj1> git config --bool core.bare true
machine1:~/proj1> mv .git/ ../proj1.git
machine1:~/proj1> cd ..
machine1:~> rm -rf proj1
machine1:~> git clone proj1.git
machine1:~> cd proj1
Rất quan trọng: vì bạn đã chuyển vị trí của repo từ proj1 sang proj1.git, bạn cần cập nhật tệp này trong tệp .git / config trên machine2 . Sau đó, bạn có thể cam kết thay đổi của mình từ machine2. Cuối cùng, tôi cố gắng giữ các repos trần của mình ở một vị trí trung tâm, cách xa cây làm việc của tôi (tức là không đặt 'proj1.git' trong cùng thư mục gốc là 'proj1'). Tôi khuyên bạn nên làm như vậy, nhưng tôi muốn giữ các bước trên đơn giản nhất có thể.