git将symlink作为常规文件提交

has*_*sen 31 git symlink

假设我有一个文件fname,它是来自其他某个存储库/项目的文件的符号链接,比方说../../proj2/fname.

有没有办法添加/提交fname作为常规文件?

似乎默认情况下,git提供文件模式120000并将链接文件的路径设置为blob内容.

我知道这个因为git ls-tree显示文件的模式120000,并git cat-file -p显示../../proj2/fname为blob的内容.

mga*_*aia 48

如果要显示文件而不是链接,则应该使用该ln命令创建硬链接而不是sym-link(ln -s).

建立一个硬链接,你可以让同一个文件显示在两个不同的目录下,所以通过任何链接改变它将反映通过两个链接的变化,并且文件将存在于两个目录中,因此它将被跟踪git.

我希望Windows mklink /jBukov的回答中做到这一点,但我真的根本不知道.

  • 这个答案对我来说比@Jefromi更有帮助. (3认同)
  • 应该注意的是,带有"ln"的硬链接仅适用于文件,但不适用于目录. (2认同)

Cas*_*bel 17

不,Git知道这是一个符号链接.Git假装其他方式有点危险,因为它最终会写回到repo 之外的文件.将其作为符号链接进行跟踪正是预期的行为.

  • 让符号链接指向您的 git 存储库更有可能有用。如果您有一个用于系统配置的存储库,然后您将 git 管理的配置文件替换为指向已检出存储库中文件的链接,就会出现这种情况。 (3认同)
  • 我希望在这种情况下写入行为是删除符号链接并将其替换为常规文件. (2认同)
  • @hasenj:如果这就是你想要的,那么删除符号链接并将其替换为链接文件的副本.你的"预期"行为涉及Git修改文件...添加?承诺?这也不是一件好事. (2认同)