我可以通过将符号链接放在git存储库中来添加文件吗?

时间:2016-10-08 17:25:49

标签: git ln

有没有办法通过放置符号链接将文件推送到git存储库外部。

我希望例如推送文件/root/my_file并在git存储库中创建了一个符号链接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

2 个答案:

答案 0 :(得分:7)

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

您可以通过创建硬链接而不是符号链接来实现您想要的效果。硬链接是文件系统级别上文件名与其内容(和元数据)之间的关联。通过创建文件的硬链接并将其添加到存储库,您将添加该链接文件。在符合POSIX的操作系统(如所有Linux)上,您可以创建如下的硬链接:

ln /root/my_file my_hard_link

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

更新:请注意,git对硬链接一无所知。添加到git repo的硬链接意味着您要添加该链接文件的内容。 Git不知道你刚刚添加的文件是一个硬链接。添加到repo的硬链接不会破坏它,但是从repo中检查它将创建该文件的新副本,并且不会重新创建该硬链接。通过“检查”我不仅仅指git checkout命令,还包括clone一个新的repo副本,删除硬链接并使用git reset重新创建它,或{{1}来自远程仓库的这个硬链接文件的新版本。

总结一下 - 你的两个选择是:

  • 添加指向回购的符号链接 - 这将仅添加有关链接的信息,而不是链接文件的内容。
  • 添加到回购的硬链接 - 这将添加链接文件的内容。虽然它不会添加有关链接的信息,但在下次从存储库中检出硬链接文件之前,它也不会中断链接。

答案 1 :(得分:0)

如果您使用的是Windows,则可以尝试使用Git for Windows在git存储库中创建符号链接。

从Windows Vista开始,支持符号链接。在应用程序设置期间您必须Enable Symbolik Link on Git(见图片)

默认情况下,Git Bash中的ln -s命令不会创建符号链接。相反,它会创建副本。

要创建符号链接(假设您的帐户有权这样做),请使用内置的mklink命令,如下所示:

mklink /d this-link-points-to c:\that-directory
mklink this-link-points-to c:\that-file

Enable Symbolik Link on Git