2012-07-12 131 views
1

我有一些部署腳本可以自動將存儲庫克隆到本地目錄。不幸的是,我還沒有找到處理更新的好方法,所以我只是預先清除了本地目錄。這顯然非常浪費。Git命令切換到任意的git倉庫/分支?

理想情況下,我需要一系列命令來保證特定的本地目錄成爲指定的repo /分支的副本,並且所需的數據傳輸量最小。因此,如果目錄已經在正確的回購/分支上,它只會更新它。如果它位於正確的回購站點,但不是正確的分支,它將切換到新的分支。

我確定有一種方法可以通過檢查.git中的一些文件並根據所發現的內容執行特定操作來實現此目的,但我希望有一種更簡單的方法。

一個重要的注意事項是,本地目錄中的任何更改總是可以被丟棄。

可能有一個問題已經回答了這個問題,但我一直沒有找到正確的措辭來找到它。

+0

如果您可以將所有回購作爲遠程添加到本地副本中,您可以'git fetch ',然後執行'git checkout -f '。 *編輯:*這是一個答案,我認爲。 :D – vergenzt 2012-07-12 15:19:38

回答

6
$ git fetch <url> <branch>  # get the most up-to-date version of that branch 
           # (only downloads needed objects) 

$ git checkout -f FETCH_HEAD # force the working tree to match fetched branch 

請注意,這樣做會在回購中留下舊對象。如果在任何時候你想不可逆轉刪除未引用的對象和清理倉庫,可以運行

$ git reflog expire --expire=now --all 
$ git gc --prune=now 
+0

這似乎是,謝謝!它確實可能會讓東西從舊的回購/ /無論如何,但我認爲這對我的目的很好。我真的很感激快速的迴應。 – 2012-07-12 15:56:11

+0

是的,那是我要評論的其他內容。如果你想**不可逆轉地刪除舊的,未引用的對象從本地回購,你可以運行'git reflog expire --expire = now --all'後面跟着'git gc --prune = now'。 – vergenzt 2012-07-12 16:01:12

0

一個重要的說明是,在本地目錄的任何變化總是可以丟棄。

你需要這樣的第一件事是:

git stash 
git stash drop 

如果目錄已經在正確的回購/支

我不知道你的意思是「在正確的回購「,但我猜測這將涉及檢查pwd針對你想要的目錄和cd或其他什麼。

然而有趣的部分是分支。使用下面的命令:

__git_ps1 "%s" 

你混蛋在當前庫當前分支(或什麼,如果它不是一個Git倉庫)。在.git文件夾,裸存儲庫,合併過程中也有特殊輸出。

然後,您可以使用此命令的輸出檢查您感興趣的分支,以瞭解您是否在正確的分支上。儘管如此,即使您已經在其上,即使簽出了所需的分支,它也簡單得多。