我想修改一个(文本)文件的索引,而不必更改工作树文件状态。这可能吗?
答案 0 :(得分:1)
是的,你可以在任何git级别上使用--work-tree选项(这实际上不是真的。它应该适用于任何边缘情况除外)命令:
git show HEAD:path/to/your/file.txt > /some/other/place/file.txt
# modify the file in /some/other/place/file.txt
git --work-tree=/some/other/place add /some/other/place/file.txt
答案 1 :(得分:1)
是的,您可以使用git update-index
在特定路径上明确地暂存blob。
git update-index --cacheinfo 100644 <sha1-of-blob> path/in/repo
如果路径是分支新文件,您还需要使用--add
。
如果要放置的文件是git存储库中尚不存在的blob,则可以使用git hash-object
将新blob存储在git存储库中,例如:
blobid=$(command_that_creates_output | git hash-object -w --stdin)
或
blobid=$(git hash-object -w /path/not/necessarily/in/repository)
然后您可以按上述方式暂存blob。
git update-index --cacheinfo 100644 blobid path/in/repo
答案 2 :(得分:1)
“在不改变工作目录的情况下更改索引中的文件”的另一种方法是仅将索引应用于索引。这通常是GUI git客户端只放置给定文件中选定行的方式。
您可以从(如果需要)开始清除该文件的索引更改:
git reset path/to/file
然后为其提取完整的补丁
git diff path/to/file > /path/to/tmpfile
编辑补丁文件以仅包含您要应用的更改,并仅应用已编辑的补丁:
git apply --cached /path/to/tmpfile
请参阅:
git help apply