git - 我可以通过将符号链接(symbolic link)放入 git 存储库来添加文件吗?

标签 git ln

有没有办法通过放置符号链接(symbolic link)将文件推送到 git 存储库。

例如,我想推送文件 /root/my_file 并在 git 存储库中创建了一个符号链接(symbolic link) my_symbolic_link

# ls -lA                                                                                                                    
drwxr-xr-x 7 root root 4096 Oct  8 07:55 .git/
lrwxrwxrwx 1 root root   26 Oct  8 7:58 my_symbolic_link -> /root/my_file

最佳答案

符号链接(symbolic link)是一个文件,其中包含对文件系统中另一个文件的引用。您可以将符号链接(symbolic link)添加到您的存储库,但这样做只会添加对其他文件的引用,而不是其他文件。

您可以通过创建硬链接(hard link)而不是符号链接(symbolic link)来实现您想要的。硬链接(hard link)是文件名称与其内容(和元数据)在文件系统级别上的关联。通过创建文件的硬链接(hard link)并将其添加到您的存储库,您将添加该链接文件。在 POSIX 兼容的操作系统(如所有 linux)上,您可以像这样创建硬链接(hard link):

ln /root/my_file my_hard_link

有关不同类型链接的更多信息,请参阅 this question及其答案。

更新:请注意,git 对硬链接(hard link)一无所知。添加到 git repo 的硬链接(hard link)意味着您正在添加该链接文件的内容。 Git 不知道您刚刚添加的文件是硬链接(hard link)。向 repo 添加硬链接(hard link)不会破坏它,但是从 repo 中 check out 它会创建该文件的新副本,并且不会重新创建该硬链接(hard link)。我所说的“ checkout ”不仅仅指 git checkout 命令,还包括 clone 新的 repo 副本、删除硬链接(hard link)和使用 等操作>git reset 重新创建它,或者从远程仓库 pull 这个硬链接(hard link)文件的新版本。

回顾一下 - 您的两个选择是:

  • 向存储库添加符号链接(symbolic link) - 这将仅添加有关链接的信息,而不添加链接文件的内容。
  • 将硬链接(hard link)添加到存储库 - 这将添加链接文件的内容。虽然它不会添加有关链接的信息,但在您下次从存储库中检查该硬链接(hard link)文件之前,它也不会断开链接。

关于git - 我可以通过将符号链接(symbolic link)放入 git 存储库来添加文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935249/

相关文章:

git - Visual Studio git clone 始终对文件使用 LF

ubuntu - ubuntu终端新目录中的链接数量问题

git - 如何git存储库外的文件夹?

linux - 符号链接(symbolic link)编辑和硬链接(hard link)的差异

git - 获取当前分支的最后 N 次提交并将它们应用到另一个分支

Android 金鱼分支

git - 如何将 git 跟踪的文件转换为 git-lfs?

Git 应用补丁静默失败(没有错误但什么也没有发生)

ubuntu - Ubuntu for OS X ln -h 中的等效选项是什么?