2014-04-21 43 views
2

我確實遇到以下問題。我正在編寫一個腳本,它在文件夾中搜索存儲庫,在網絡上查找遠程數據並將所有新數據拖入存儲庫,通知我有關新更改。主要想法很清楚。我在Windows 7 x64上使用python 2.7,使用pygit2來訪問git功能。命令行支持簡單的命令「git pull'origin'」,但是git api更復雜,我看不到方向。好吧,我來了那麼遠: import pygit2 orepository=pygit2.Repository("path/to/repository/.git") oremote=repo.remotes[0] result=oremote.fetch() 此代碼檢索新對象,並將其下載到存儲庫,但不更新主分支或檢查新的數據。通過使用TortoiseGit檢查存儲庫,我發現沒有辦法檢出,即使在顯示日誌時也不會顯示新的日誌消息。我需要使用git pull命令刷新存儲庫和工作副本。現在我的問題是:我需要做什麼來通過使用pygit2來完成所有這些?我的意思是,我通過提取它們來下載更改,但是我需要做什麼?我想更新主分支和工作副本... 非常感謝您提前幫助解決我的問題。 最好的問候。用pygit2提取和集成遠程更改

回答

2

Remote.fetch()不更新workdir中的文件,因爲它離它的工作很遠。如果您想要更新當前分支並檢出這些文件,您還需要通過Repository.create_reference()Reference.target=執行這些步驟,具體取決於您當時擁有的數據,然後例如Repository.checkout_head()如果你確實決定更新。

git-pull是一個腳本,根據傳遞的配置和標誌執行很多不同的步驟。當你編寫一個工具來模擬多個存儲庫時,你需要弄清楚你想要做什麼,而不是希望一切都設置好,以便git-pull不會讓你感到驚訝。

+0

'Repository.checkout_head()'和'Repository.checkout('HEAD')'有什麼區別?文檔中提到,在沒有參數的情況下調用'Repository.checkout'會將checkout_index作爲默認值。 – avck

+0

更新引用後,如果我做'Repository.checkout('HEAD')',索引保持修改,即'Repository.status()'顯示一個包含更改的文件。使用'Repository.checkout_head()'也會清除索引。 你能解釋一下這裏發生了什麼嗎? – avck

+0

沒有看到代碼的順序或命令的輸出,這將是非常困難的。請注意,缺省策略是'GIT_CHECKOUT_STRATEGY_SAFE',如果發生衝突(這可能是發生的事情),則會中止檢出,因爲您說更改後的文件「保留」。 –