我可以安全地 git/commit/push 或 rsync 当前由 tee 写入的文件而不破坏任何管道吗?

我可以安全地 git/commit/push 或 rsync 当前由 tee 写入的文件而不破坏任何管道吗?

我有一个管道工作了几天,以非常低的速度写出一些科学结果(每小时一次大约 20 行的块);大多数时候,什么也没有写。该文件由 编写tee

我希望每天都能得到新的结果而不打扰这个过程;我当然不想打破管道。

我可以使用此文件创建一个私人存储库,以便提交(当前正在写入的)文件,以便从我的手机或其他设备查看新结果吗?

如果我提交并推送,管道会以某种方式损坏吗?

编辑:其他想法,我可以rsyncscp文件(从我的手机)以便查阅新结果吗?

答案1

Git 除了从文件中读取之外什么也不做。这样绝对不会把管子弄坏。您甚至可以为只读目录创建 git 存储库并提交只读文件。只要您只是添加和提交内容,而不是执行任何检查或修改工作目录的操作,Git 需要写入的唯一位置就是 Git 目录内(.git默认情况下,但您可以将其放在其他位置)git --git-dir=…)。

如果您真的担心,可以通过查看 Git 源代码来确认这一点。或者通过查看 git 是如何提交文件的......

strace -o commit.strace -f git commit -m wibble foo

您只会看到lstatopen(…, O_RDONLY)调用foo

可能失败的是git add行动。如果进程恰好在 Git 读取文件时写入文件,Git 可能会注意到文件已更改并放弃。在任何情况下,这都不会影响源文件:git add myfile如果失败则不应该执行任何操作,但即使 Git 存在某种错误并且无法正确恢复,它也只会影响 Git 索引,而不影响 Git 只处理过的数据文件以只读方式打开。我认为错误消息是“对不稳定的对象源数据感到困惑”,但我还没有检查,可能还有一些其他检查首先触发的大小。考虑到您的数据速率,如果git add失败,请暂停一秒钟,然后重试。

相关内容