如何在具有特定父级的存储库中找到所有提交?
例如,如果我有一个 commit A,我想找到与A. 在 LibGit2Sharp 中执行此操作的最有效,即高性能但正确的方法是什么?
如何使用rugged检查git repo中是否存在未提交的更改?
如何使用libgit2遍历分支的所有提交?
我已经有了下面的代码,但它没有编译.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <git2.h>
int main(int argc, char *argv[]){
git_repository *repo;
git_repository_open(&repo, ".");
git_odb *obj_db;
obj_db = git_repository_database(repo);
git_object commit;
git_revparse_single(&commit, repo, "HEAD");
git_repository_free(repo);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GCC报告:
log.c: In function ‘main’:
log.c:11:9: warning: assignment makes pointer from integer without a cast [enabled by default]
log.c:13:13: error: storage size of ‘commit’ isn’t known
Run Code Online (Sandbox Code Playgroud)
我用-lgit2旗子编译.从root-commit开始,是否有可能快速完成所有提交?
更新 新代码如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <git2.h>
int main(int argc, char *argv[]){
git_repository *repo;
git_repository_open(&repo, …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 libgit2 的 repo 中提取。
我的步骤是这些:
这导致 .git 文件夹中的 MERGE_HEAD ,然后我可以与现有提交合并。
问题是,上面的顺序是否正确?为什么 git 创建 FETCH_HEAD 而 libgit2 有 MERGE_HEAD?
作为libgit2是一个库,是有其取决于libgit2并且暴露出通常GIT中的命令行接口(像任何现有的C / C ++项目git clone,git commit等等)?
我如何将 libgit2 作为库包含在 cmake 中。我已经从 github 克隆了 libgit2 存储库。比我跑的
mkdir build && cd build
cmake ..
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
我在 /usr/local/include/git2/ 和 /usr/local/include 下找到了安装的文件。
我现在必须在我的 cmake 文件中放入什么?
最近我一直在使用 git stash 很多次,我一直在想它真的很慢,即使在一个只有一个文件的新存储库上也是如此。我读过这个问题,大约GIT中藏匿缓慢而这另一个而想尽回答这些问题,但没有任何实际工作。
例如,我已经完成了以下步骤来重现它:
git inittouch file.txtvim file.txt (编辑文件添加 2 行)git add .git commit -m "Initial commit"vim file.txt (再次编辑添加1行)time git stash输出:
$ time git stash
Saved working directory and index state WIP on master: b9454ed Initial commit
HEAD is now at b9454ed Initial commit
real 0m8.042s
user 0m0.000s
sys 0m0.046s
Run Code Online (Sandbox Code Playgroud)
8 秒存储一条线的时间太长了。现在使用 libgit2sharp 进行测试:
static void Main(string[] args)
{
Repository repo=new Repository(@"C:\Users\UserTest\TestGitRepo");
repo.Stashes.Add(new Signature("test", "test@test.com", new DateTimeOffset(DateTime.Now)), "Stash …Run Code Online (Sandbox Code Playgroud) 我正在尝试libgit2使用 SSH 密钥对 git 服务器进行身份验证。到目前为止,这适用于像 的 URL ssh://myuser@host.domain:1234/dirs/repo.git,其中我的应用程序接受 URL 作为参数。
但是,如果我从 URL 中删除用户名(即ssh://host.domain:1234/dirs/repo.git)连接失败,即使我以编程方式设置了用户名(见下文)。
考虑以下用于检查某个存储库是否可访问的程序的 MCVE(除必要外,没有错误检查):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
#include <git2.h>
#include <git2/sys/repository.h>
int my_cred_cb(git_cred **out, const char *url,
const char *username_from_url, unsigned int allowed_types, void *payload)
{
uid_t uid = geteuid(); // Get effective user ID
struct passwd* pw = getpwuid(uid); // Get password file entry
char privkeypath[strlen(pw->pw_dir) + 13];
strcpy(privkeypath, pw->pw_dir);
strcat(privkeypath, "/.ssh/id_rsa"); …Run Code Online (Sandbox Code Playgroud) 我正在使用git2-rs在Rust应用程序中实现一些标准的git功能.我一直在阅读git内部,并了解在高级别"git pull"是一个"git fetch",然后是"git merge",但我仍然无法理解如何使它与git2-rs一起工作.有对一个问题的讨论在这里在那里的同意,GIT2-RS"混帐拉"的例子将是很好的,但一个是从未创建.有一个在该讨论中进行硬重置的示例,但我想避免覆盖本地更改(因此合并).我一直无法在使用git2-rs的任何其他代码库中找到示例.
该"混帐复位"的例子在这里展示了如何获得一个OID后,取指,我认为,但合并功能需要一个AnnotatedCommit,我不知道如何在两者之间转换,或者即使是走在正确的方向.