[python]dulwich 只是個 git client 我想…
https://github.com/jelmer/dulwich
安裝…找不到說明,BUT!
出奇的簡單,用 git 從 github 下載回來,使用 setup.py install 就搞定。
操作…
操作的文件在這 http://www.samba.org/~jelmer/dulwich/docs/tutorial/index.html,真的是RTFM,不注意還找不到文件在哪裡。我太嫩了。
已經知道細節的人,可以直接跳 http://www.samba.org/~jelmer/dulwich/docs/tutorial/repo.html 開始!但是,不知道細節的人,一定要從頭到尾看清楚每個字,尤其是 Introduction,它把這個軟體的功能說的很清楚。就是「它有寫的就是它能做的」。我原先以為他能像 git command line 工具一樣操作,結果不是。文章中,介紹了 .git 裡面的三個物件,commit, tree, blob,dulwich 軟體主要就是讓你操作這三個物件來達成你想要的動作。於是經過了嘗試、失敗、掙扎、又嘗試別的程式,失敗,掙扎,又回來嘗試這程式…的循環,我得到了我想要的結果。
我這裡整理一下我知道的跟我不知道的對應表。
git init myrepo | from dulwich.repo import Repo |
git --bare init | 不知道該怎辦。因為我只是把 dulwich 當 client 端,應該不會用到這個指令。 |
git add foo.txt | repo.stage(["foo.txt"]) |
git commit | commit_id = repo.do_commit("The first commit", committer="your name <name@example.com>") |
git clone | 說明:這個大家最常用來抓新專案的指令,沒辦法直接對應,要先使用 fetch,再自行把檔案內容從 stores 裡面抓出來,寫到本地端的檔案系統。
例: repo = Repo("myrepo")
這是我不小心在亂晃的時候發現的 https://lists.launchpad.net/dulwich-users/msg00116.html 藏得很隱密 |
git fetch | 目前到 github 我都是用 https:// 的,所以就試了一個用 https:// 的。git:// 的我沒試。
server_address = 'https://github.com/' client = HttpGitClient(server_address) local = Repo.init("local", mkdir=True) remote_refs = client.fetch("/jelmer/dulwich.git", local, determine_wants=local.object_store.determine_wants_all, progress=sys.stdout.write) local["HEAD"] = remote_refs["HEAD"] #這個很重要,不然會沒有HEAD! |