我最好是用一个shell脚本替换符号链接的副本,还是有另一种方式告诉Git遵循符号链接?

PS:我知道这不是很安全,但我只是想在一些特定的情况下这样做。


当前回答

@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。

其他回答

@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。

我厌倦了这里的每个解决方案,要么已经过时,要么需要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

在macOS上(我有Mojave/ 10.14, git版本2.7.1),使用bindfs。

酿造安装bindfs

cd / path / to / git_controlled_dir

mkdir local_copy_dir

bindfs </full/path/ source_dir> </full/path/ local_dir >

其他评论暗示了这一点,但在其他答案中没有明确提供。希望这能为大家节省一些时间。

1. 您应该使用硬链接,因为在硬链接中所做的更改 由git上演。

2. 创建硬链接的语法为ln file1 file2。

3.这里file1是具有硬链接的文件的位置 您要创建的文件,而file2是硬链接的位置。

4. 我希望这对你有所帮助。