微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Git 提交,而并行进程仍然处理文件

如何解决Git 提交,而并行进程仍然处理文件

我在自动化过程中使用 Git 将文件提交到存储库。在一个用例中,脚本将一个文件写入工作树,该文件最终被重复出现的“提交”命令接收。

我注意到如果进程仍在访问或修改文件,Git 会将一个空白文件提交到索引/存储库。我不知道脚本何时开始或结束写作过程。

有没有人能想到一个解决方案来忽略仍在写入的文件?我在 Windows 上有这个问题

谢谢!

解决方法

(这与其说是回答,不如说是评论,但需要比评论更多的空间。)

这里 Git 的唯一特别之处在于 git commit 不使用您工作树中的文件副本。相反,它使用 Git 索引中的文件副本。该副本是前一段时间创建或更新的,当时您(或代表您工作的某个代理)运行 git add1 所以:

我注意到,如果进程仍在访问或修改文件,Git 会向索引/存储库提交一个空白文件。

... 可能发生的情况是 git add 在进程完成对文件的处理之前正在运行。这当然是同一个底层问题,只是同步所需的步骤涉及编写程序和git add步骤,而不是编写程序和git commit步骤。

由于 Git 本身在这里没有什么特别的,你需要的是某种方式来知道写入过程已经完成写入并且没有新的写入过程开始写入。通常,这与任何文件级锁定无关:您希望 提交 成为跨所有 文件的自洽快照。


1此规则的例外情况出现在 git commit --includegit commit --onlygit commit -a。但是所有这些都是通过创建临时索引并使用 git add(或内部等效项)添加到临时索引,然后使用临时索引提交来工作的。所以这些异常并不是真正的异常:它们仍然从索引提交,只是“the”索引现在是一个临时索引,而不是主索引。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?