2013-07-23 36 views
5

đã xảy ra nhiều lần để rời khỏi văn phòng chỉ lưu một đoạn mã không được cam kết.Cách thực tế nhất để tiếp tục làm việc trên máy tính khác trên máy tính khác là gì?

Vì vậy, nếu tôi muốn tiếp tục làm việc trên cùng một tính năng, tôi đã phải SSH cho máy chủ của mình, tạo một nhánh dùng một lần, cam kết phát hành và đẩy chi nhánh mới vào kho lưu trữ phát triển.

Bây giờ tôi tự hỏi liệu có một giải pháp sạch hơn, thiết thực hơn cho việc "sao chép/xuất" một dấu gạch chéo vào kho lưu trữ cục bộ khác. Tôi đã loại bỏ SCP'ing kho lưu trữ cục bộ trên máy tính văn phòng của tôi, bởi vì tôi có thể có một số công việc đang tiến hành trên máy tính xách tay của tôi, quá.

P.S .: câu hỏi của tôi trông giống như việc tiếp tục này one

Trả lời

2

Bạn có thể sử dụng git stash show để tạo ra một bản vá và sau đó git apply nó trên máy chủ của bạn.

+0

+1 để đơn giản – ziu

1

Bạn có thể lưu bản vá và gửi cho chính mình.

git diff > patchfile 

Sau đó, bạn có thể áp dụng nó với ...

git apply --stat patchfile 
+2

Nếu tôi hiểu 'định dạng bản vá' chính xác, nó cho rằng các thay đổi đã được cam kết. Không phải là câu hỏi về những thay đổi không được cam kết thay vào đó? – AlexE

+1

Đó cũng là sự hiểu biết của tôi. Tôi xác nhận rằng tôi đang nói về những thay đổi không được cam kết và lưu trữ. – ziu

+0

Tôi sẽ sửa lỗi đó. Cảm ơn. – alex

0

Như đã chỉ ra bởi Carl Norum, git thể được sử dụng để tạo ra một bản vá. Tuy nhiên, lệnh này hơi phức tạp một chút. Bạn sẽ cần phải gọi

git diff [email protected]{0}^ [email protected]{0} > patch

để tạo ra một bản vá (lưu ý rằng vỏ của bạn có thể cần bạn quấn tên của stash trong dấu ngoặc kép). Điều đó tạo ra một bản vá cho tất cả các khác biệt của cha mẹ của stash của bạn và bản thân stash của bạn.

Sau đó, trên máy tính khác, bạn có thể áp dụng các bản vá với

git apply patch

+0

Đây không phải là giống như sử dụng 'git stash show -u'? – ziu

+0

Trong một cuộc thảo luận tôi không thể thực sự theo, tôi đã được bảo rằng nó khác. Về cơ bản, bởi vì 'git stash show' coi cam kết là sự kết hợp chúng thực sự là. Các giải pháp đề xuất dường như làm những điều phù hợp hơn. Thật không may, tôi không quá quen thuộc với những khác biệt khá kỹ thuật. Tôi đoán rằng cho mục đích của bạn (trong văn phòng: stash, tạo bản vá từ stash; ở nhà: patch và tiếp tục làm việc), giải pháp phải giống hệt nhau. Tôi không chắc chắn. – AlexE

+0

Có vẻ như bạn có thể viết câu hỏi về điều đó :) – ziu

1

Các stash được lưu lại dưới dạng một loại đặc biệt của cam kết, và vì vậy nó có sẵn trong cơ sở dữ liệu đối tượng git. Tuy nhiên, tham chiếu đến cam kết đó nằm ngoài không gian tên thường được tạo sẵn để tìm nạp.

Bạn có thể làm cho stash gần đây nhất có sẵn cho việc lấy bằng cách chạy lệnh sau đây trên kho lưu trữ nguồn:

git symbolic-ref refs/heads/exported-stash refs/stash 

này sẽ tạo ra một chi nhánh tên là exported-stash có thể được lấy giống như bất kỳ chi nhánh khác. Bạn có thể sử dụng một tên khác nếu bạn thích, nhưng tránh sử dụng stash vì điều đó sẽ dẫn đến một số cảnh báo gây phiền nhiễu về tên không rõ ràng với stash thực tế. Sau khi tìm nạp từ xa, nó có thể được áp dụng trên một kho lưu trữ khác với:

git stash apply origin/exported-stash 

(giả định rằng nó được lấy từ điều khiển từ xa origin).

Sau khi thực hiện thay đổi mà bạn thậm chí có thể giấu những địa phương và đẩy stash được cập nhật trở lại nguồn gốc với:

git push origin +stash:exported-stash 

Các + biến này vào một đẩy cưỡng bức, nhưng trong trường hợp này đó là thực sự an toàn. Các phiên bản cũ của stash trên nguồn gốc sẽ chỉ được chuyển đến [email protected]{1} kể từ khi danh sách các stashes được lưu như một bản ghi của tài liệu tham khảo.

+0

+1 cho khả năng git-fu – ziu

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