2010-10-19 30 views
203

Tôi cần một cách để xuất chuyển đổi đã được lưu vào máy tính khác.Xuất stash sang một máy tính khác

On Computer1 tôi đã làm

$ git stash save feature 

Tôi đang cố gắng để có được những bản vá stash vào một tập tin và sau đó nhập nó vào một máy tính khác

$ git stash show -p > patch 

Lệnh này mang lại cho tôi một tập tin mà tôi có thể di chuyển đến một máy tính khác mà repo này được nhân bản, nhưng câu hỏi là làm thế nào để nhập nó như là một stash một lần nữa.

Cảm ơn

Trả lời

206

Bạn có thể áp dụng một tập tin vá lỗi (không cam kết những thay đổi chưa) bằng cách đơn giản chạy

git apply patchfile 

Sau đó, bạn có thể dễ dàng tạo ra một stash mới từ thư mục làm việc hiện tại:

git stash 
+1

@Marcelo A: Rất vui khi nghe, nhưng vui lòng đánh dấu các câu trả lời bạn đã chấp nhận như vậy bằng cách nhấp vào dấu kiểm lớn bên dưới số phiếu bầu của câu trả lời. Bằng cách đó, câu hỏi của bạn sẽ được đánh dấu là đã được giải quyết. – poke

+2

Lưu ý rằng hệ thống sẽ không cho phép OP đánh dấu câu trả lời là "được chấp nhận" cho đến một thời gian (15 phút, tôi nghĩ) đã trôi qua kể từ thời điểm câu hỏi được hỏi. –

+10

Sau khi đọc câu trả lời này một điều tôi đã tự hỏi là làm thế nào để chọn một stash cụ thể từ tất cả các stashes của tôi. Câu trả lời cho điều đó là ở đây: http://stackoverflow.com/a/1910142/1148702. Trong trường hợp này tôi đã kết thúc: 'git stash show" stash @ {0} "-p> patch' thay vì lệnh shell thứ hai của OP. –

10

Hoặc bạn có thể tạo chi nhánh từ stash của mình (trên máy tính 1), sử dụng

git stash branch stashed_changes_branch 

cam kết thay đổi của bạn:

git commit -a 

sau đó thêm nó như là một từ xa trên máy tính 2:

git remote add pc1 [email protected]:/path/to/repo 

bây giờ bạn có thể lấy lại thông tin từ xa sử dụng

git fetch pc1 

bây giờ bạn có thể nhập cam kết theo cách bạn muốn; sử dụng git cherry-pick, git rebase hoặc bất cứ thứ gì bạn thích ... Nếu bạn muốn nó trông giống như bạn vừa làm git stash áp dụng; bạn có thể sử dụng git cherry-pick --no-cam kết.


Nếu bạn không có kết nối trực tiếp giữa computer1 và computer2; bạn có thể sử dụng một từ xa (như github hoặc một cái gì đó tương tự):

git push origin stashed_changes_branch 

và trên computer2:

git fetch 
+1

Điều này giả định rằng hệ thống nguồn (computer1) được mở để nhận các kết nối bên ngoài cho hầu hết mọi người ở đây không có khả năng là đúng. Nếu bạn muốn đi các tuyến đường chi nhánh tại sao không chỉ đẩy một nhánh tạm thời đến nguồn gốc từ xa và kéo từ máy tính2? Bạn có thể xóa nhánh từ xa ngay sau khi bạn đã kéo nếu bạn không muốn giữ nó. Các nhánh trong git rất rẻ nên thường có ít lý do để không sử dụng chúng. – indivisible

+0

@indivisible Tôi không đồng ý có rất nhiều cơ hội để kết nối hai máy tính trên internet ngay hôm nay. Kỹ thuật được mô tả trong câu trả lời có thể hữu ích khi chuyển một công việc đang tiến hành từ máy tính xách tay sang máy tính để bàn trên mạng LAN. Ngay cả một dịch vụ VPN ảo như Hamachi sẽ được sử dụng để chuyển các tập tin qua internet bất cứ nơi nào trực tiếp giữa các máy tính chạy git. – steampowered

+1

@steampowered, chắc chắn nó _may_ là đúng đối với một số người/tình huống nhưng tôi nghĩ rằng nó là một điểm đáng chú ý cho người đọc trong tương lai vì nó là một yêu cầu khó khăn cho giải pháp này để làm việc và sửa đổi env/hệ thống địa phương của bạn để chấp nhận lưu lượng truy cập đến cấu hình, theo ý kiến ​​của tôi, là "quá mức cần thiết" cho một nhiệm vụ như thế này. Nếu hệ thống của bạn đã được mở thì tất cả các phương tiện đều sử dụng câu trả lời này - nó không chính xác.Tôi chỉ cảm thấy rằng phần lớn người dùng đến đây sẽ không ở trong tình huống như thế. – indivisible

6

Hoặc bạn có thể xuất toàn bộ ẩn nấp địa phương để compter khác như sau

  • git pull trên cả thư mục git cũ và mới của bạn để đảm bảo cả hai đều có thay đổi mới nhất.
  • sao chép.thư mục git từ thư mục git cũ đến kho lưu trữ mới
2

Tùy chọn khác là rsync thư mục .git từ máy tính này sang máy tính khác. rsync chỉ xử lý các thay đổi đối với tệp (nhanh hơn bản sao).

Một nhược điểm của phương pháp này là các cấu hình cũng sẽ bị ghi đè, có thể không được mong muốn nếu bạn chạy các cấu hình .git khác nhau giữa hai máy. Nhưng bạn có thể khắc phục điều này bằng cách loại trừ các tệp với tùy chọn --exclude trong rsync.

Nhìn chung, tôi nghĩ rằng một giải pháp Git gốc là sạch hơn, nhưng hack rsync này có thể là tốt đẹp cho một ai đó vội vàng có thể quen thuộc hơn với rsync hơn git.

0

Lệnh khởi động từ các bài bản gốc:

git stash show -p [email protected]{x} > patch_file 

đã không làm việc cho tôi (vì một lý do nó tạo ra file vá không sử dụng được). Thay vào đó, tôi phải:

git stash apply [email protected]{x} 
git commit 

cho mỗi stash tôi muốn chuyển. Sau đó, tôi đặt 'mẹ' repo trong file: /// tầm ảnh hưởng của repo 'con', và đã làm những điều sau đây, đối với mỗi stash cam kết:

git fetch file:///path_to_parent_git && git cherry-pick commit_sha 
git reset --soft HEAD^ 
git stash save my_new_stash_on_child 

này là phức tạp hơn nhưng đã làm các trick cho tôi .

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