Tag: git

使用libgit2的“git log -1 fullpath / myfile”

我想用libgit2实现git log -1 fullpath/myfile 。 我是libgit2的新手。 我是在正确的轨道上吗? 这是我到目前为止: git_repository_head(&refToHead, repo); headOID = git_reference_oid(refToHead); git_commit_lookup(&headCommit, repo, headOID); headTreeOID = git_commit_tree_oid(headCommit); git_tree_lookup(&tree, repo, headTreeOID); git_tree_entry_byname(tree, “repopath/myfile”); 不幸的是, git_tree_entry_byname似乎不适用于repo的子目录中的文件。 任何的想法? 谢谢你,拉尔斯

如何在我的代码中使用Git的malloc包装器?

我想在我的代码中使用git的malloc和realloc包装器来处理OOM(内存不足)的情况。 这是它的代码: void *xmalloc(size_t size) { void *ret = malloc(size); if (!ret && !size) ret = malloc(1); if (!ret) { release_pack_memory(size, -1); ret = malloc(size); if (!ret && !size) ret = malloc(1); if (!ret) die(“Out of memory, malloc failed”); } #ifdef XMALLOC_POISON memset(ret, 0xA5, size); #endif return ret; } 但是release_pack_memory函数在sha1_file.c头文件中,这个函数引用了Git代码中其他头文件中的函数,我不想花费太多精力从Git的代码库中隔离这个函数。 目前我正在寻找release_pack_memory函数的替代函数,或者你能推荐我另一种选择。 我会感谢任何帮助

用libgit2实现’git pull’?

我有一个相对较短的Gist ,它应该使用libgit2来模拟git pull命令的function。 不幸的是,它并没有完全奏效。 总之,代码片段: 调用git_repository_open()来打开磁盘上的存储库 调用git_remote_load()来获取名为“origin”的远程git_remote * 使用GIT_DIRECTION_FETCH标志调用git_remote_connect() 调用git_remote_download()从远程获取对象 根据git_remote_stats() ,确实正在获取对象。 但工作目录不会更改以反映最新的提交。 我尝试添加: git_checkout_head(repo, NULL); ……但这没有任何区别。 输入: git checkout master …在终端中产生以下输出: 已经’掌握’了 您的分支通过1次提交落后于“origin / master”,并且可以快速转发。 我如何快进?

在C / C ++源代码中包含Git提交哈希和/或分支名称

我想知道如何将Git提交哈希和/或其他信息添加到已编译二进制文件中的C ++变量的内容中,而不必将其作为Git跟踪的源代码的一部分。 我需要在嵌入式处理器上运行的已编译可执行文件中跟踪固件发布信息。 识别固件二进制文件的特定版本的方法,例如有意义的文件名,MD5校验和甚至日期/时间戳,在这个封闭的环境中是不可用的(即,没有文件系统)。 一种方法是让设备的控制台输出产生识别文本,例如“版本1.2.3”,“提交哈希1bc123 ……”或类似文本。 固件发布信息仅供维护人员使用,因此经过培训的操作员可以检查控制台输出。 为了实现这一点,它可能涉及手动编辑版本字符串,然后将其编译为代码并在程序启动时输出到控制台。 对于使用签核工作流程来仔细检查版本信息是否正确的主要版本,这是可以接受的。 然而,这是一个手动过程,它本质上是不可靠的。 例如,如果开发人员忘记更新版本信息怎么办? – 现在编译的代码与其报告的版本字符串之间存在脱节。 每次用户想要测试硬件时新编译和下载代码的工作流程在所讨论的情况下是不实际的,即,更新固件是相当繁重的。 因此需要一种识别代码版本的自动方法。 在这种情况下,使用Git,开发人员定期将他们的工作提交给function分支。 显示Git提交哈希,以及可能还有未分级更改,将是一种识别用于编译固件的源代码状态的方法。 要求是我希望我的应用程序可以获得信息,以便它能够显示:“Git commit:[01abcdef … etc],branch:experimentalStuffDoNotRelease” 因此,我想在编译的C和/或C ++代码中自动包含Git信息,例如提交哈希和分支。 开发环境使开发人员同时使用Windows和Linux,并使用Eclipse CDT,其工作流程相对简单:check out; 编译; 下载到硬件。

如何将更新的git-hash嵌入到Version.hpp中?

原标题:如何使git忽略我的文件而不管分支? 我有以下post-checkout文件,它按预期工作: #!/usr/bin/ruby cmd = ENV[“HOME”] + “/dev/pitbull/cpp/bin/gen_version.rb –write” `#{cmd}` gen_version.rb脚本计算出时间戳,最后一个主标记和HEAD git哈希,并写入同样位于git中的VERSION.hpp文件。 然后我use git update-index –assume-unchanged VERSION.hpp使git忽略我的更改。 现在,如果我留在我的开发分支,这很有用。 但当我尝试一个get checkout master ,我搞砸了: git checkout master error: Your local changes to the following files would be overwritten by checkout: cpp/inc/core/util/VERSION.hpp Please, commit your changes or stash them before you can switch branches. Aborting 什么是正确的git设置,以便我可以在我签出时更新VERSION.hpp但是git忽略对此文件的任何更改,无论我的分支是什么? 编辑我改变了主题,因为最终解决方案实际上解决了更广泛的主题,这可能对更多SO用户更有用。 因此,您可以通过两种方式阅读本主题:使用原始标题和下面的答案,或者使用上面更广泛的问题,再次使用下面的整个解决方案。

为什么某些函数声明extern和头文件不包含在Git源代码的源代码中?

我想看看真实世界应用程序的源代码,以了解良好的编程实践等。所以我选择了Git并下载了1.8.4版本的源代码。 在随机浏览各种文件之后,我在这两个文件中引起了我的注意: strbuf.h strbuf.c 这两个文件显然使用此文档定义了API。 我有两个问题: 为什么第16,17,18,19行的函数声明和’strbuf.h’第6行的全局变量声明为extern? 为什么“strbuf.h”在strbuf .c中不是#included? 我作为新手程序员总是学会在.c文件中编写函数定义,而函数声明,宏,内联等都写在.h文件中,然后在每个.c文件中都包含#includedfunction等 有人可以解释一下吗?

如何检索所有对象ID?

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

你在git commit –gpg-sign = `时签署了什么数据?

我正试图弄清楚如何手动签署/validation提交,但我无法弄清楚正在签署哪些数据来创建签名。 换句话说,我无法弄清楚gpg –verify 是什么gpg –verify 。 这是git源代码的相关部分: https : //github.com/git/git/blob/master/commit.c#L1047-L1231但我也是C.的新手。 这是一些示例数据: 在一个新的git ledger.txt ,我创建了一个文件ledger.txt并使用签名提交提交它: git config –global user.signingkey 7E482429 git init echo “EAC5-531F-38E8-9670-81AE-4E77-C7AA-5FC3-7E48-2429 1\n” > ledger.txt git add ledger.txt git commit -m “Initial commit” –gpg-sign=7E482429 在这里它是在日志中: git log –show-signature commit 876793da21833b5b8197b08462523fd6aad3e5ba gpg: Signature made Fri May 9 20:01:55 2014 CDT using RSA key ID 7E482429 […]

克隆一个git repo(深入)

如何克隆repo(使用libgit2 ) 我想用libgit2 git clonefunction。 我可能会问的是git clone真正深入了解了什么。 这就是我到目前为止所做的事情: 初始化回购 调整配置文件以添加远程 创建一个git_remote 下载packfile 索引packfile并编写索引(给我们一个.idx文件) (编辑)将所有不同的分支写入磁盘。 (编辑)以某种方式进行git checkout 。 现在我不知道该怎么做。 我唯一的猜测是将.idx加载到git_index并使用git_repository_set_index ,但是它也没有显示任何文件。 编辑 我在半克隆​​的repo上测试了运行git checkout master ,这就完成了工作。 现在我只需要了解如何使用libgit2进行操作,似乎问题跟踪器中有一些有用的信息。 编辑2 我现在将添加我当前的代码,希望有一天有人能发现它有用,希望能成为我从未找到的快速启动代码。 注意:我在这里使用的是Obj-C和Objective-Git ,但它主要是简单的c。 + (GTRepository *)cloneFromRemoteURL:(NSURL *)remoteURL toLocalURL:(NSURL *)localURL { // Let’s suppose the URL looks like: https://github.com/libgit2/libgit2.git // Then we need to get a URL like this […]

Git忽略C项目的文件

我刚刚开始学习C(使用Thinking In C ),我想知道在C项目的git存储库中我应该忽略哪些文件。 没有任何建议可以太明显 – 我是一个完全的菜鸟。 谢谢!