标签: libgit2

使用libgit2sharp在提交及其父级之间进行更改

我正在使用libgit2sharp(libgit2的C#包装器)并且一直在遇到问题,因为它没有很多我希望的功能(希望我能尽快做出贡献;这看起来像是一个非常有用的项目)

我现在要做的是获取从特定提交及其父级更改的文件列表.我不会试图找出合并与其两个父母之间的变化.我对常规提交更感兴趣.

这些家伙(https://github.com/libgit2/libgit2sharp/issues/89)正在研究类似的东西.我认为他们的程序是一个合理的想法,但我对GIT内部的理解有点弱(最终用户的GIT指南有很多指南,但内部结构却没有那么多)

我很好奇GIT本身如何执行"git diff"命令.据说GIT实际上并不存储增量,而是文件的完整版本(如果它没有改变,它只会指向现有的SHA.这些信息可以从各种来源找到,例如http://xentac.net/2012/01 /19/the-real-difference-between-git-and-mercurial.html).这似乎使得更难以在两次提交之间进行更改(在我的情况下是特定提交及其单个父级),因为数据不是作为提交的一部分存储的(如果您检查libgit2sharp的Commit.cs中的Commit类,这很明显)文件).

我可以通过提交访问的是树.是否有必要执行以下操作以查找此信息:

1)从所需的提交开始,然后沿着树向下走,并将所有SHA值存储在一个集合中.

2)从父级开始进行所需的提交,然后沿着其树向下移动,将其所有blob SHA值存储在另一个集合中.

3)更改文件的SHA将是不在两组交集中的文件.

我用这种方法看到的问题是它看起来没有办法从blob的SHA值中获取文件名(我没有看到任何可以在libgit2sharp的Blob.cs文件中执行此操作).

我知道这个问题有很多方面,但它们是从git获取特定数据的大目标的一部分.

谢谢.

git libgit2 libgit2sharp

8
推荐指数
1
解决办法
4357
查看次数

有没有用libgit2,libgit2sharp,Ngit用msysgit替换windows?

嗨,我喜欢Git,但似乎与人和朋友分享Windows项目并不好玩,因为与tortoisehg或tortoisesvn(不是它的DVCS)相比,gitextensions tortoisegit开箱即用是丑陋的.在bash shell中使用msysgit并不像linux/Mac那样好.

那么有没有新的竞争者(alpha项目等(甚至与其他libs))?

我很想看到这些新的Git库腾飞!

windows git libgit2 libgit2sharp

8
推荐指数
1
解决办法
2244
查看次数

libgit2相当于git log

我正在尝试使用libgit2执行以下操作:

git log -z --all --topo-order
Run Code Online (Sandbox Code Playgroud)

我遇到了以下问题:1)找到最简单的方法将所有裁判推入到revwalker中; 2)以相同的顺序获得结果.虽然我尝试过拓扑和时间排序的各种组合,但我仍然看到较旧的分支出现在顶部附近.

我的最新尝试包括打电话git_revwalk_push_glob(walk, "refs/*"),但不是所有的分支都出来了.一个测试仓库有两个本地分支,一个(当前一个)缺失.

我实际上是在Objective-git中这样做,但是GTEnumerator接口有点受限,所以我不得不扩展它.

更新:我继续手动推送refs/heads,refs/remotes和refs/tags(以及所有stashes,因为我实际上想要的不仅仅是顶部).订购问题仍然存在.

libgit2

8
推荐指数
0
解决办法
490
查看次数

使用NodeGit CloneOptions克隆分支

我试图找出如何将克隆选项传递给nodegit克隆方法.

节点git文档声明克隆方法的第3个参数是克隆选项对象 http://www.nodegit.org/nodegit/#Repo-clone

git.Repo.clone(URL, path, CloneOptions, callback);
Run Code Online (Sandbox Code Playgroud)

但是,此对象不包含在nodegit的标准版本中.

我已将clone_options.cc文件的绑定添加到bindings.gyp文件中,我可以访问克隆选项对象.但是,我无法弄清楚如何使用有效的分支名称实例化它.libgit2 api显示该选项是checkout_branch http://libgit2.github.com/libgit2/#HEAD/type/git_clone_options

任何人都有任何关于如何做到这一点的见解?或者在支持克隆节点中的git分支的替代库中?

var CloneOptions = nodegit.CloneOptions;
var options = new CloneOptions({checkout_branch: branchName});
git.Repo.clone(url, temp, options, function (err, repo) {...});
Run Code Online (Sandbox Code Playgroud)

结果是

Error: git_clone_options is required.
Run Code Online (Sandbox Code Playgroud)

nodegit的github问题页面上还有一个开放的线程

https://github.com/nodegit/nodegit/issues/127

git node.js libgit2

8
推荐指数
1
解决办法
1976
查看次数

Git2go - 拉&&合并

我想实现的东西,这将使我的结果git pullgit fetch && git merge.我得到了这个部分工作,但我遇到的问题是,在运行以下代码后,当前的repo仍然认为有本地更改要提交.

据我所知,我相信我可能没有从正确的HEAD创建带注释的提交,或者我需要再次提交?(我不确定).

我的代码看起来像这样,我被困住了:

func (repo *Repo) Pull() error {
    // Get remote
    remote, err := repo.Remotes.Lookup("origin")
    if err != nil {
        remote, err = repo.Remotes.Create("origin", repo.Path())
        if err != nil {
            return err
        }
    }

    // Get the branch
    branch, err := repo.Branch()
    if err != nil {
        return err
    }

    // Get the name
    branchName, err := branch.Name()
    if err != nil {
        return err
    }

    if err := …
Run Code Online (Sandbox Code Playgroud)

git merge git-pull libgit2

8
推荐指数
2
解决办法
939
查看次数

如何检索所有对象ID?

我试图使用libgit2获取git存储库中所有对象ID的列表.我似乎无法找到任何方法.libgit2有一个方法来获取所有对象ID(或迭代它们),还是我需要手动读取它们?

c git libgit2

7
推荐指数
1
解决办法
837
查看次数

pygit2 blob历史

我正在尝试git log filename使用pygit2在git裸存储库中进行相当的操作.该文档仅解释了如何执行git log此操作:

from pygit2 import GIT_SORT_TIME
for commit in repo.walk(oid, GIT_SORT_TIME):
    print(commit.hex)
Run Code Online (Sandbox Code Playgroud)

你有什么主意吗?

谢谢

编辑:

我现在有类似的东西,或多或少精确:

from pygit2 import GIT_SORT_TIME, Repository


repo = Repository('/path/to/repo')

def iter_commits(name):
    last_commit = None
    last_oid = None

    # loops through all the commits
    for commit in repo.walk(repo.head.oid, GIT_SORT_TIME):

        # checks if the file exists
        if name in commit.tree:
            # has it changed since last commit?
            # let's compare it's sha with the previous found sha
            oid = commit.tree[name].oid
            has_changed …
Run Code Online (Sandbox Code Playgroud)

python git history blob libgit2

7
推荐指数
1
解决办法
1188
查看次数

用libgit2实现'git pull'?

我有一个相对较短的Gist,它应该libgit2用来模拟git pull命令的功能.不幸的是,它并没有完全奏效.

总之,代码片段:

根据git_remote_stats(),物体确实被取出.但工作目录不会更改以反映最新提交.我尝试添加:

git_checkout_head(repo, NULL);
Run Code Online (Sandbox Code Playgroud)

......但这没有任何区别.

输入:

git checkout master

...在终端中产生以下输出:

Already on 'master'
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.

我如何快进?

c git libgit2

7
推荐指数
1
解决办法
2544
查看次数

LibGit2Sharp索引被锁定 - 错误

有时我会尝试同时读取和写入Git存储库.但后来当我尝试提交文件时,我收到以下错误消息:

libgit2引发了一个错误.Category = Index(LockedFile).索引已锁定.这可能是由于同意或崩溃的过程.

提交按预期完成,为什么我收到此错误消息?我怎么摆脱它?

(如果LibGit2Sharp开发人员看到这一点:错误消息中存在拼写错误:concuRRRent.):D

versioning git github libgit2 libgit2sharp

7
推荐指数
2
解决办法
7966
查看次数

使用libgit2从另一个分支创建新的git存储库?

在使用libgit2的C++中,我想创建一个新的本地存储库,其master分支基于specific-branch另一个本地存储库,保持其历史记录,以便稍后我可以在两者之间同步.

基本上,我尝试以下,除了使用libgit2:

/sf/answers/667089321/

所以,如果我的文件安排如下:

./old.git [branches:master,specific-branch]

./old/*[特定分支的./old.git文件和克隆]

命令的位置如下:

git init --bare ./new.git
cd ./old
git push ./new.git +specific-branch:master
Run Code Online (Sandbox Code Playgroud)

并想出类似的东西(删除错误检查以减少代码):

git_libgit2_init();
git_repository* repo = nullptr;
git_repository_init(&repo, "./new.git", true);
git_remote_create(&remote, repo, "origin", "./new.git");
git_remote_add_push(repo, "origin", "+specific-branch:master");
git_push_options optionsPush = GIT_PUSH_OPTIONS_INIT;
git_remote_push(remote, nullptr, &optionsPush);
Run Code Online (Sandbox Code Playgroud)

我不确定的是从这里开始的地方以及如何git_remote_push()正确地调用实际执行某些操作的地方.目前没有副作用,因为./old.git没有参考.也就是说,./new.git是正确创建的,但它不包含./old.git/的内容./old/*.

非常感谢.


基于建议采用"获取"方法的答案,我还尝试了以下方法:

git_repository* repo = nullptr;
if (git_repository_init(&repo, "./new.git", true)) {
    FATAL();
}
git_remote* remote;
git_remote_create_anonymous(&remote, repo, "./old");
char* specs[] = { _strdup("specific-branch:master"), nullptr …
Run Code Online (Sandbox Code Playgroud)

c++ git libgit2

7
推荐指数
1
解决办法
555
查看次数

标签 统计

libgit2 ×10

git ×9

libgit2sharp ×3

c ×2

blob ×1

c++ ×1

git-pull ×1

github ×1

history ×1

merge ×1

node.js ×1

python ×1

versioning ×1

windows ×1