我正試圖在兩個分支之間實現一個簡單的結帳操作。代碼執行沒有錯誤。使用libgit2簽出分支
git_libgit2_init();
git_object *treeish = NULL;
git_checkout_options opts;
opts.checkout_strategy = GIT_CHECKOUT_SAFE;
/* branchName in this case is "master" */
handleError(git_revparse_single(&treeish, repo, branchName));
handleError(git_checkout_tree(repo, treeish, &opts));
git_object_free(treeish);
git_libgit2_shutdown();
然而,當我檢查它使用git status
分支不會改變。 我檢查了101 examples of libgit2和它說:
git_checkout_options
實際上不是很隨意。在少數情況下,默認值 不會有用。這個 的最好例子是checkout_strategy;默認值對工作樹不起作用。 因此,如果您希望結賬檢查文件,請選擇合適的 策略。
NONE
相當於空轉;沒有文件將被檢出。
SAFE
類似於git checkout
;未修改的文件被更新,修改後的文件被單獨保留。如果舊HEAD 中存在文件但缺失,則認爲它已被刪除,並且不會被創建。
RECREATE_MISSING
與git checkout-index
類似,或克隆後發生了什麼。未修改的文件被更新,創建了丟失的文件 ,但修改後的文件被單獨保留。
FORCE
類似於git checkout --force
;所有的修改都被覆蓋,並且所有丟失的文件都被創建。
在我的情況下,我測試它與一個非常小的回購沒有無可爭議的變化和這兩個分支之間沒有任何衝突。
我在做什麼錯?我預計此代碼可以執行類似於git checkout master
謝謝!它現在按預期工作!我也將這個問題的答案(https://stackoverflow.com/a/30469509/4942153)添加到以避免「git_checkout_options上的無效版本0」錯誤 –