我最好是用一个shell脚本替换符号链接的副本,还是有另一种方式告诉Git遵循符号链接?
PS:我知道这不是很安全,但我只是想在一些特定的情况下这样做。
我最好是用一个shell脚本替换符号链接的副本,还是有另一种方式告诉Git遵循符号链接?
PS:我知道这不是很安全,但我只是想在一些特定的情况下这样做。
当前回答
符号链接的转换可能很有用。链接到Git文件夹中,而不是脚本中的符号链接。
其他回答
我厌倦了这里的每个解决方案,要么已经过时,要么需要root,所以我做了一个基于ld_preload的解决方案(仅限Linux)。
它连接到Git的内部,覆盖'这是一个符号链接吗?函数,允许符号链接被视为它们的内容。默认情况下,所有到回购外部的链接都是内联的;详情请参见链接。
我所做的是将符号链接中的文件添加到Git中(我没有使用符号链接,但是):
sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY
在Git-managed目录下执行此命令。必须在将SOURCEDIRECTORY挂载到TARGETDIRECTORY之前创建TARGETDIRECTORY。
它在Linux上工作得很好,但在OS X上就不行了!这个技巧也帮助了我的Subversion。我用它来包括来自Dropbox帐户的文件,网站设计师在那里做他/她的事情。
如果你想让这个绑定永久存在,在/etc/fstab中添加以下行:
/sourcedir /targetdir none bind
我使用的是Git 1.5.4.3,如果传递的符号链接后面有斜杠,它会跟着它。如。
# Adds the symlink itself
$ git add symlink
# Follows symlink and adds the denoted directory's contents
$ git add symlink/
@user252400建议的另一种实现是使用bwrap,这是一个小型setuid沙盒,可以在所有主要发行版中找到——通常默认安装。Bwrap允许你无需sudo就可以绑定挂载目录,并在git或shell退出时自动解除绑定。
假设你的开发过程不是很疯狂(见下文),在一个私有的命名空间中启动bash,并在git目录下绑定外部目录:
bwrap --ro-bind / / \
--bind {EXTERNAL-DIR} {MOUNTPOINT-IN-GIT-DIR} \
--dev /dev \
bash
然后做你通常做的所有事情,比如git添加、git提交等等。当你完成时,退出bash。干净简单。
注意:为了防止沙盒转义,bwrap不允许执行其他setuid二进制文件。详见man bwrap。
我以前在符号链接之外添加文件已经有一段时间了。这在过去工作得很好,不需要做任何特别的安排。自从我更新到Git 1.6.1后,这就不再有效了。
您可以切换到Git 1.6.0来实现这个功能。我希望Git的未来版本会有一个Git -add标志,允许它再次跟随符号链接。