如何让 Git 跟踪符号链接?

10 浏览
0 Comments

如何让 Git 跟踪符号链接?

我最好的选择是使用一个Shell脚本来将符号链接替换为副本,还是有其他方法告诉Git跟随符号链接?\n附注:我知道这不是很安全,但我只想在一些特定情况下这样做。

0
0 Comments

如何让Git跟踪符号链接?

Git无法直接跟踪符号链接,但可以通过使用硬链接来解决这个问题。硬链接与软链接不同,所有程序,包括Git,都将把文件视为普通文件。需要注意的是,内容可以通过更改源文件或目标文件来修改。

以下是在不同操作系统上解决该问题的方法:

在macOS(10.13 High Sierra之前)上:

如果已经安装了Git和Xcode,请安装hardlink工具。这是一个微型工具,用于创建硬链接。

要创建硬链接,只需执行以下命令:

hln source destination

macOS High Sierra更新:

苹果文件系统是否支持目录硬链接?

苹果文件系统不支持目录硬链接。将HFS+转换为APFS卷格式时,所有目录硬链接都将转换为符号链接或别名。

在Linux和其他Unix系统上:

使用ln命令可以创建硬链接:

ln source destination

在Windows(Vista、7、8等)上:

使用mklink在Windows上创建联接:

mklink /j "source" "destination"

请注意,这仅适用于osX上的HFS/HFS+!

需要注意的是,Linux上的硬链接不能跨文件系统边界(这是我的用例)。

如果目标路径中有符号链接,这种方法将无法工作。

无法创建目录的硬链接,对吗?

在OS X上,ln source destination也可以工作。在El Capitan上进行了测试。

不,但可以使用`cp -al source destination`。`-l`表示硬链接文件而不是复制。

不幸的是,无法硬链接目录,也无法跨文件系统边界。这使得这个解决方案对我来说无法工作。

即使在文件系统之间,这个解决方案也无法正常工作:无法创建硬链接‘localDirpath1/file’到‘/dirpath2/file’:无效的跨设备链接

在APFS上,目录硬链接在OSX High Sierra上无法正常工作。

在Windows上很好地工作。

只要删除其中一个文件的硬链接(即其中一个文件的副本),是否还能正常工作?还原补丁等操作使用unlink命令。

是的,良好的编辑器和Git通常不会简单地用`st_nlink > 1`覆盖文件,而是会询问是覆盖还是创建新文件-更喜欢创建新文件。因此,在这里使用硬链接就像在水上绘画一样…

我发现给定的ln符号表示令人困惑(而且顺序错了?)。根据man页面的说明,应该是`ln TARGET LINK_NAME`。

0
0 Comments

如何让Git跟随符号链接?

有时候,我们希望在Git仓库和应用程序目录之间创建符号链接,但是Git默认并不会跟随符号链接。那么,我们应该如何解决这个问题呢?

一个解决方法是换个角度思考,即从应用程序目录指向Git仓库,而不是从Git仓库指向应用程序目录。具体做法如下:

1. 将需要的配置文件(比如config.conf)添加到Git仓库中,例如在~/repos/application/config.conf路径下;

2. 然后通过运行ln -s ~/repos/application/config.conf命令在~/application目录下创建一个符号链接。

这种方法可能并不总是适用,但对我来说效果很好。

另一种解决方法是使用junction命令(在Windows 7下使用"mklink /j"命令),可以在一个Git仓库中创建指向另一个Git仓库的符号链接,这样可以在两个位置编辑文件并提交到各自的远程仓库。

当然,有时候问题的答案就是如此简单。

如果你想在不同的代码仓库中同时跟踪源代码和目标代码,上述方法可能不适用。

还有一种情况是,如果你想在Nginx中使用符号链接来提供文件服务,那可能会遇到问题,因为Nginx拒绝从符号链接中提供文件服务。

如果你想在两个Git仓库之间共享一个文件夹,那就无法使用上述的“换个角度思考”的方法了。我认为Git应该增加一个--follow-symlinks选项来解决这个问题。

还有一种方法是在Git仓库中添加一个创建符号链接的脚本,这样可以备份各种应用程序的配置文件。但是需要注意的是,有些应用程序(比如iCloud)并不会跟随符号链接。

总之,看起来并没有一个通用的方法可以让Git跟随符号链接,但是根据具体情况可以选择合适的解决方法。

0
0 Comments

如何使Git遵循符号链接?

问题的原因:

- 想要将符号链接中的文件添加到Git中,但是若不使用符号链接,并没有使用它。

- 在Linux上使用了sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY命令成功实现了这一目标,但在OS X上却不起作用。

解决方法:

- 在Git管理的目录中执行以下命令:sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY。在将SOURCEDIRECTORY挂载到TARGETDIRECTORY之前,TARGETDIRECTORY必须先创建。

- 若要使此绑定永久生效,可以将以下行添加到/etc/fstab文件中:/sourcedir /targetdir none bind

- 若要撤销此绑定,使用umount [mydir]命令。

- 若要使绑定持久生效,可以将其放入/etc/fstab文件中,如:/sourcedir /targetdir none bind

- 另一种方法是使用sshfs命令来实现类似的功能,不需要sudo权限,只需安装sshfs并执行sshfs username:/etc/folder ./target_folder命令即可。

其他相关信息:

- 对于OS X,可以使用bindfs.org,使用brew install bindfs命令安装,并按照屏幕上显示的说明正确设置osxfuse。

- 使用bwrap命令可以在不使用sudo的情况下绑定挂载目录,该命令在所有主要发行版上都可用,并且可能预装在许多系统中。

以上就是如何使Git遵循符号链接的原因和解决方法。

0