2015-04-06 50 views
6

我想在分支上進行提交(例如master)。使用pygit2創建提交

我正在使用pygit2pygit2.clone_repository)的倉庫克隆

然後我改變現有的文件在庫中。

後來我運行此做出承諾:

index = repository.index 
index.add_all() 
index.write() 
author = pygit2.Signature(user_name, user_mail) 
commiter = pygit2.Signature(user_name, user_mail) 
tree = repository.TreeBuilder().write() 
oid = repository.create_commit(reference, author, commiter, message,tree,[repository.head.get_object().hex]) 

但是當我去到倉庫和運行git status

On branch master 
Changes to be committed: 
(use "git reset HEAD <file>..." to unstage) 
new file: test.txt 

修改後的文件似乎是增加了提交,但提交沒有成功。使用返回的OID,我可以在pygit2存儲庫中找到commit屬性。

我錯過了什麼嗎?

+0

我沒有看到你的代碼提到某處的分支,也許你應該指定某處? – 2015-04-06 10:48:45

+0

引用的值是'ref/heads/master' – user1479699 2015-04-06 10:54:10

+0

我很難爲pygit2找到體面的文檔,所以我只是猜測:我看到在做了一些狀態更改後調用了各種'write()'方法。 'create_commit()'是隱式寫入還是忘記這麼做? – 2015-04-06 10:56:56

回答

3

通過編寫

tree = repository.TreeBuilder().write() 

要創建一個空的樹,你再給這個作爲樹的承諾,這意味着你已經刪除的每個文件(如果你運行你可以看到運行你的代碼後運行git show HEAD)。

你想要做的,而不是什麼是

tree = index.write_tree() 

存儲在索引樹(創建爲準丟失)中的數據資源庫,並且當你運行像git commit命令會發生什麼。然後,您可以像現在這樣將此樹傳遞給提交創建方法。