Git 硬链接会被破坏吗?

Git 硬链接会被破坏吗?,git,bash,unix,Git,Bash,Unix,我有一种感觉,有时我的硬链接会被破坏 我使用通过创建链接来同步多个副本,例如: link ~/work/genDocs/bibs/SKM.bib SKM.bib 有一次,我意识到没有进行同步,于是我“更新”了链接。我个人认为,这不应该发生,但可能是这样的链接被破坏了吗 我能想到的理由是: 系统更新 干扰版本控制(我使用git) 如果重新创建原始文件(~/work/genDocs/bibs/SKM.bib),而不是就地修改,则可能发生这种情况。将创建一个新的inode,但您的链接仍将指向旧in

我有一种感觉,有时我的硬链接会被破坏

我使用通过创建链接来同步多个副本,例如:

link ~/work/genDocs/bibs/SKM.bib SKM.bib
有一次,我意识到没有进行同步,于是我“更新”了链接。我个人认为,这不应该发生,但可能是这样的链接被破坏了吗

我能想到的理由是:

  • 系统更新
  • 干扰版本控制(我使用git)

如果重新创建原始文件(
~/work/genDocs/bibs/SKM.bib
),而不是就地修改,则可能发生这种情况。将创建一个新的inode,但您的链接仍将指向旧inode。通过使用
ln-s
创建符号链接,而不是使用
link
创建硬链接,可以解决此问题。请参见

要避免在修改文件内容时更改inode,请使用Unix文本文件编辑器
ed

尽管(几乎)所有的
ed
实现也都使用临时文件(请参阅),
ed
-与
sed-i
(正如切普纳已经指出的那样)-在不更改各自的索引节点的情况下“就地”修改文件(请参阅)


+1例如,
sed-i
创建一个新的修改文件,然后用它替换原始文件。
# sed & ed example to demonstrate whether inode is being changed or preserved

# sed
# inode is changed
{
rm -Pfv testfile.txt
echo a > testfile.txt
ls -i testfile.txt
sed -i -e 's/a/A/' testfile.txt
ls -i testfile.txt
}

# ed
# inode is not changed
{
rm -Pfv testfile.txt
echo a > testfile.txt
ls -i testfile.txt
printf '%s\n' 'H' ',s/a/A/' 'wq' | ed -s testfile.txt
ls -i testfile.txt
}

# > 
# redirection operator preserves inode (on Mac OS X 10.6.8)
{
rm -Pfv testfile.txt
echo a > testfile.txt
ls -i testfile.txt
echo A > testfile.txt
ls -i testfile.txt
}