我正在尝试使用Rugged以编程方式创建对现有存储库的提交(libgit2的Ruby绑定(bind))。我已尝试遵循RuggedREADME中提供的文档,但我认为它与代码库的当前状态不太匹配。当我尝试运行以下代码时,我不断收到错误消息:require'rugged'#Createaninstanceoftheexistingrepositoryrepo=Rugged::Repository.new('/full/path/to/repo')#grabthecurrentTimeobjectfornowcurr_time=Time.now#writeanewblobtothereposi
给定一个blob对象,您如何找到包含该对象的(第一个)提交?我认为的一个解决方案是从分支的顶端开始一个revwalk并沿着图表走下去,检查每个提交的树并使用类似git_tree_entry_byid的东西来查看它是否包含你的目的。这会找到可从特定分支访问的提交,但在我的情况下这是一个解决方案。有更好的方法吗? 最佳答案 如果您想检查某个对象是否包含在特定提交中,唯一的方法是沿着对象图走下去,看看它是否存在。但是,您可以通过一种方式重复使用其中一些搜索。如果你比较了一对提交,并且你知道有问题的对象包含(或不包含)在其中一个中,你可以查
给定一个特定的引用(在本例中是一个标签),你如何列出包含该提交的分支git2go?类似于gitbranch--contains. 最佳答案 这里的问题,从图的角度来看是“我怎么知道A是否是B的祖先?”(对于您想成为B的每个分支重复几次)。回答这个问题的唯一方法是从B开始沿着历史图走下去,然后检查是否找到A。您可以通过几种方式做到这一点,但最有效的通常是将问题简化为等同的“A是A和B的merge基础吗?”。您可以通过Repository.MergeBase()在git2go中询问这个问题。这将返回您提供的两个提交之间的最佳merge基
我为此苦苦挣扎。我正在尝试使用以下代码将更改推送到存储库://Getremoteremote,err:=repo.Remotes.Lookup("origin")iferr!=nil{remote,err=repo.Remotes.Create("origin",repo.Path())iferr!=nil{returnerr}}//Getthebranchbranch,err:=repo.Branch()iferr!=nil{returnerr}//GetthenamebranchName,err:=branch.Name()iferr!=nil{returnerr}iferr:=r
我很好奇在windows下使用libgit2sharp处理SSH-Repos的当前状态。是否有可能例如使用SSH(git@github.com:libgit2/libgit2sharp.git)克隆一个Repo?谢谢 最佳答案 从v0.21开始,还不可能。拉取请求(参见#852)正在进行中以实现此目的。欢迎订阅它,您是否希望收到有关其进展的通知。幕后的计划是依靠libssh2来实现这一目标。 关于windows-libgit2sharp中Windows上SSH的状态是什么,我们在Stac
在WindowsXP32位机器上,我使用克隆了libgit2存储库gitclonegit://github.com/libgit2/libgit2.gittrunk然后我从trunk_build_debug配置mingw使用:cmake../trunk-DCMAKE_BUILD_TYPE=Debug-DCMAKE_C_FLAGS=-g并用构建它make使用这个新构建的库,我正在尝试创建一个新的存储库。所以我正在使用error_code=git_repository_init(&repo,path,0);if(error_code!=0){constgit_error*error=git
自从用户上一次从计算机上推动的时候,我想查看所有提交。using(varrepo=newRepository(repositoryDirectory)){varc=repo.Lookup(shaHashOfCommit);//Let'sonlyconsidertherefsthatleadtothiscommit...varrefs=repo.Refs.ReachableFrom(new[]{c});//...andcreateafilterthatwillretrieveallthecommits...varcf=newCommitFilter{Since=refs,//...reachab
在libgit2sharphttps://github.com/libgit2/libgit2sharp/您如何检查未决/未提交的更改? 最佳答案 以下对我有用:///DEPRECATED-seecommentfrom@derptasticpublicboolHasUncommittedChanges{get{using(varrepo=newRepository(repositoryRoot)){RepositoryStatusstatus=repo.RetrieveStatus();returnstatus.IsDirty;}}
我试图找出C/C++源代码中只有源代码发生变化的显着差异。我知道你可以使用gitdiff-G但在可以运行的正则表达式类型方面似乎非常有限。例如,它似乎没有提供一种方法来忽略C/C++中的多行注释。在运行diff之前,git或最好是libgit2中是否有任何方法可以忽略注释(包括多行)、空格等?或者确定diff输出中的一行是否是注释的方法? 最佳答案 gitdiff-w忽略空白差异。你不能忽略多行注释,因为git是一个版本控制工具,而不是依赖于语言的解释器。它不知道你的代码是C++。它不解析文件的语义,因此它无法解释什么是注释,什么不
在使用libgit2的C++中,我想创建一个新的本地存储库,其中它的master分支基于来自另一个本地存储库的specific-branch,维护它的历史这样我以后就可以在两者之间进行同步。本质上,除了使用libgit2之外,我正在尝试以下操作:https://stackoverflow.com/a/9529847/1019385如果我按如下方式排列文件:./old.git[branches:master,specific-branch]./old/*[filesandcloneof./old.gitatspecific-branch]命令应该是这样的:gitinit--bare./n