git 坚固:工作目录里的树?

wz3gfoph  于 2023-03-16  发布在  Git
关注(0)|答案(1)|浏览(100)

我需要提交工作目录的当前状态(即存储在文件系统上的文件及其内容)转移到非 checkout 分支。以无状态方式完成此操作非常重要,因为用户可能进行了本地修改或暂存了一些文件。这意味着文件在提交之前不应通过索引暂存。(应用程序的其余部分已经以无状态方式运行。)
实现这一点的一个直接方法是递归地构建Tree,同时从目录向下,但是我假设这样一个常见的任务很可能已经在Rugged/libgit 2中实现了(例如,Index#add_all做了非常类似的事情)。
Rugged是否提供了一种从当前工作目录(关于.gitignore & Co.)创建Tree对象而不更改索引的方法?

tp5buhyn

tp5buhyn1#

有一种方法可以使临时区域不影响当前索引:使用单独的GIT_INDEX_FILE
它是git cli的一部分,我猜libgit2支持它(不过我会让您确认这一点)。
然后,您可以使用两个管道命令write-treecommit-tree来创建一个不是HEAD后代的提交。
下面是一个使用git cli的例子:

export GIT_INDEX_FILE .git/my_temp_index

git add that/directory
tree=$(git write-tree)
git commit-tree $tree -p that/other/branch -m "my commit message"

unset GIT_INDEX_FILE
rm .git/my_temp_index

相关问题