如何在 libgit2 中设置结帐选项以使其表现得像"git checkout"
how to set checkout options in libgit2 to behave like "git checkout"
我在某个分支中工作,但是现在我想结帐到另一个指定的分支。当我设置这样的结帐选项
git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_FORCE;
进行了结帐,并且我在存储库中的所有文件都更改为结帐分支中的文件...
如果我在第一个分支机构中执行了提交,那么一切都很清楚,但是如果我不这样做,我就会丢失所有不承诺的更改。
是否有一种方法可以像终端中的" Git Checkout"一样行事?我的意思是,当我进行结帐时,程序会意识到是否有一些不承认的更改,
->如果没有 - 结帐正在发生
->如果有一些不承认的更改,它会打印一些信息,例如git 终端
例如,来自终端的消息:
您对以下文件的本地更改将被结帐覆盖:output.csv
我认为我必须设定不同的结帐策略,但是我不知道哪个是最好的
我也尝试了
opts.checkout_strategy = GIT_CHECKOUT_NOTIFY_DIRTY;
,但其行为与力相同
您可能想将策略设置为GIT_CHECKOUT_SAFE
。然后,您可以将notify_flags
(不是checkout_strategy
(设置为GIT_CHECKOUT_NOTIFY_CONFLICT
,并设置打印出冲突文件的通知回调。
最后,我以另一种方式获得了信息,有我的解决方案:
git_libgit2_init();
const char * REPO_PATH = path.c_str();
git_repository * repo = nullptr;
git_repository_open(&repo, REPO_PATH);
git_diff_options diffopts = GIT_DIFF_OPTIONS_INIT;
git_diff *diff;
diffopts.flags = GIT_CHECKOUT_NOTIFY_CONFLICT;
git_diff_index_to_workdir(&diff, repo, NULL, &diffopts);
size_t num_deltas = git_diff_num_deltas(diff);
if (num_deltas != 0){
const git_diff_delta *delta = git_diff_get_delta(diff, 0);
int i = 0;
cerr << "Your local changes to the following files would be overwritten by checkout : " << endl;
while (i<num_deltas) {
delta = git_diff_get_delta(diff, i);
git_diff_file file = delta->new_file;
cerr << "t" << file.path << endl;
i++;
}
cerr << "Please commit your changes before you switch branches. " << endl;
}
else cout << "All files OK, can checkout now" << endl;
git_diff_free(diff);
git_repository_free(repo);
git_libgit2_shutdown();
相关文章:
- 在已经使用Git的情况下减少编译时间
- 使用Qt C++计算类似Git的SHA1哈希
- 如何在c++中从git建立外部库
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 从C++程序调用 git 克隆
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 更改 git 分支名称后,在项目的 Visual Studio 代码中丢失智能感知(建议,转到定义C++
- 如何组织 git 工作流以修复错误并同时引入新功能
- 自动完成在git存储库中的Visual Studio项目中不起作用
- 在构建时执行execute_process以在构建时获取git提交哈希
- git 子模块的替代方案,用于使用多个存储库的项目
- 将 Git 提交哈希读取到C++时出错
- 使用 libgit2 从另一个分支创建新的 git 存储库?
- 如何在构建Qt应用程序时运行git命令
- 我被困在尝试克隆需要 cmake 文件和依赖项的 git 存储库中
- CMake Ninja Git 自签名证书颁发机构密码提示
- 如何从终端分离,以便 git 中的接收后钩子完成
- 使用 Git init、fetch 和 checkout 克隆 Git 存储库
- 如何在 libgit2 中设置结帐选项以使其表现得像"git checkout"
- Qt Creator + git checkout +完全重新编译