Git 提交,而并行进程仍有处理文件的句柄
Posted
技术标签:
【中文标题】Git 提交,而并行进程仍有处理文件的句柄【英文标题】:Git commit while parallel process still has handle on file 【发布时间】:2021-04-10 21:09:02 【问题描述】:我在自动化过程中使用 Git 将文件提交到存储库。在一个用例中,脚本正在将文件写入工作树,最终被重复出现的“提交”命令拾取。
我注意到如果进程仍在访问或修改文件,Git 会将一个空白文件提交到索引/存储库。我不知道脚本何时开始或结束编写过程。
有没有人能想到一个解决方案来忽略仍然写入的文件?我在 Windows 上遇到了这个问题
谢谢!
【问题讨论】:
【参考方案1】:(这更像是一个评论而不是一个答案,但需要比评论更多的空间。)
这里 Git 的唯一特别之处在于 git commit
不使用工作树中的文件副本。相反,它使用 Git 索引中的文件副本。该副本是在一段时间前创建或更新的,当时您(或代表您工作的某个代理)运行 git add
。1 所以:
我注意到如果进程仍在访问或修改文件,Git 会将空白文件提交到索引/存储库。
... 可能发生的情况是 git add
在进程完成文件处理之前正在运行。这当然是同一个底层问题,只是同步所需的步骤涉及到写程序和git add
这一步,而不是写程序和git commit
这一步。
由于 Git 本身在这里没有做任何特别的事情,因此您需要通过某种方式来知道编写过程已经完成编写,并且没有新的编写过程开始编写。一般来说,这与任何文件级锁定无关:您希望 commit 成为跨 所有 个文件的自洽快照。
1git commit --include
、git commit --only
和 git commit -a
存在例外情况。但所有这些工作都是通过创建一个临时索引并使用git add
(或内部等效项)添加到临时索引,然后使用临时索引提交。所以这些异常并不是真正的异常:它们仍然从索引提交,只是“the”索引现在是一个临时索引,而不是主索引。
【讨论】:
很抱歉回复晚了!我完全错过了那个答案,但因为这个问题再次出现在我面前,我又回来了,你的评论仍然是我想要的!再次感谢!!以上是关于Git 提交,而并行进程仍有处理文件的句柄的主要内容,如果未能解决你的问题,请参考以下文章