я пишу простой код для реализации git checkout branch-name
FileMode не может быть изменен, когда извлекаете новый филиал
git_repository *repo = NULL;
git_signature *sig;
git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_FORCE;
git_signature_now(&sig, "name", "email");
git_repository_open(&repo, "test");
git_repository_set_head(repo, "refs/heads/v1", sig, NULL);
git_checkout_tree(repo, NULL, &opts);
git_signature_free(sig);
git_repository_free(repo);
Все работает отлично, за исключением изменения FileMode.
$ git status
On branch v1
Your branch is up-to-date with 'sugareps/ibm_r22'.
Changes to be committed:
modified: include/javascript/select2/select2-spinner.gif
modified: include/javascript/select2/select2.png
Changes not staged for commit:
modified: /modules/DropDownBrowser.php
$git diff # or git diff --cached
old mode 100644
new mode 100755
Что мне делать? Может кто-нибудь дать мне некоторое предложение.
Возможно, это ошибка в libgit2. Там [проблема в pygit2] (https://github.com/libgit2/pygit2/issues/423) предполагает, что она не работает. –
Кстати, я только что самостоятельно справился с одной и той же проблемой, и ваша учетная запись - это все, что я нашел в Google до сих пор. Я могу воспроизвести его с помощью очень простого репо с двумя коммитами, которые отличаются только изменением файла. Мой код очень похож на ваш, и я не нашел очевидного обходного пути. Разбиты на 0.21.3, 0.21.5 и 0.22.1. –