2010-10-19 89 views
203

我需要一種方法將存儲的更改導出到另一臺計算機。將存儲導出到另一臺計算機

Computer1上我做了

$ git stash save feature 

我試圖讓藏補丁文件,然後將其導入到另一臺計算機

$ git stash show -p > patch 

這個命令給了我一個文件,我可以移動到另一臺電腦中,這個repo被克隆,但問題是如何再次將它作爲存儲導入。

感謝

回答

206

您可以通過簡單地運行

git apply patchfile 

更新補丁文件(不提交的修改還)然後,你可以簡單地創建從當前工作目錄中的一個新的存儲:

git stash 
+1

@Marcelo A:很高興聽到,但請點擊答案投票數字下方的大號複選標記來回答您接受的答案。這樣你的問題將被標記爲已解決。 – poke 2010-10-19 21:55:41

+2

請注意,系統將不會讓OP將答案標記爲「已接受」,直到問題提出時已經過去了一段時間(我認爲是15分鐘)。 – 2010-10-19 21:58:02

+10

看完這個答案後,我想知道的是如何從我所有的藏品中選擇一個特定的藏匿處。答案就在這裏:http://stackoverflow.com/a/1910142/1148702。在這種情況下,我最終做了:'git stash show'stash @ {0}「-p> patch'而不是OP的第二個shell命令。 – 2016-03-16 15:03:23

10

或者你可以從你的存儲器(在計算機1上)創建一個分支,使用

git stash branch stashed_changes_branch 

提交更改:

git commit -a 

然後將其添加爲遠程計算機2:

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

現在你可以檢索使用

git fetch pc1 

遠程信息現在你可以以您想要的方式導入提交;使用git cherry-pickgit rebase或任何你喜歡的東西... 如果你想它看起來像你剛纔那樣git暗藏申請;你可以使用git cherry-pick --no-commit。


如果你有電腦1和電腦2之間沒有直接的聯繫;你可以使用一個遙控器(如GitHub的或類似的東西):

git push origin stashed_changes_branch 

和電腦2:

git fetch 
+1

這假定源系統(computer1)是開放的,可以接收大多數人登陸的外部連接這裏不太可能是真實的。如果你想走分支路線,爲什麼不把溫度分支推到遠程原點並從計算機2中取出?如果您不想保留它,可以在拉出後儘快刪除遠程分支。 git中的分支很便宜,通常沒有理由不使用它們。 – indivisible 2016-09-27 06:45:15

+0

@indivisible我不同意今天有很多機會連接互聯網上的兩臺電腦。回答中描述的技術可能有助於將正在進行的工作從筆記本電腦傳輸到LAN上的桌面。甚至像Hamachi這樣的虛擬vpn服務也可以用來在運行git的計算機之間直接在互聯網上傳輸文件。 – steampowered 2017-07-18 13:41:59

+1

@steampowered,肯定它可能適用於某些人/情況,但我認爲這是一個值得注意的未來讀者的觀點,因爲這個解決方案的工作和修改本地環境/系統接受傳入流量的硬性要求並不重要在我看來,這種配置對於像這樣的任務是「過度殺傷」的。 如果你的系統已經打開,那麼一定要用這個答案 - 這是不正確的。我只是覺得大部分登陸這裏的用戶都不會遇到這種情況。 – indivisible 2017-07-18 13:52:06

6

或者你可以將整個本地藏匿導出到另一個compter如下

  • git pull在你的舊的和新的git目錄上,以確保兩者都有最新的變化。
  • 複製。從舊的git目錄新的存儲庫git的文件夾
2

另一種選擇是rsync的從一臺計算機.git文件夾複製到另一臺計算機。 rsync只處理文件更改(快於複製)。

這種方法的一個缺點是配置也會被覆蓋,如果你在兩臺機器之間運行不同的.git配置,這可能是不希望的。但是你可以通過rsync中的--exclude選項排除文件來克服這個問題。

總的來說,我認爲原生Git解決方案更乾淨,但這種破解可能對於那些可能比git更熟悉rsync的人來說很不錯。

0

從原崗位的啓動命令:

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

並沒有爲我工作(由於某種原因無法使用創建補丁文件)。相反,我不得不:

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

我想轉移每個藏匿。然後,我把文件中的「父」回購:///前往「孩子」回購,並做了以下內容,每個藏匿承諾:

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

這是比較複雜的,但做的把戲我。

相關問題