Git和硬链接

时间:2010-09-16 17:45:08

标签: linux git hyperlink hardlink

考虑到Git无法识别指向存储库外部的符号链接,使用硬链接是否有任何问题?

Git可以打破他们吗? 能否请您指出详细信息?

4 个答案:

答案 0 :(得分:67)

表示Git中目录的“tree”对象存储文件名和(权限子集)权限。它不存储inode编号(或其他类型的文件ID)。因此,硬链接 无法在git 中表示,至少在没有metastoregit-cache-meta等第三方工具的情况下也是如此(我不确定是否即使使用这些工具也是可能的。)

Git试图不触及它不需要更新的文件,但你必须考虑到git不会试图保留硬链接,所以它们可以被git打破。


关于指向存储库外的符号链接:git对它们没有任何问题,应该保留符号链接的内容......但是这些链接的实用程序对我来说是不确定的,因为这些符号链接是否会被破坏是否取决于文件系统布局 外部 git存储库,而不是git的控制。

答案 1 :(得分:16)

好的,现在这是迟到的回复= D

我发现,使用钩子,您可以捕获git pull事件(当有什么东西可以拉动时......)将脚本事件处理程序写入.git/hooks/post-merge文件。

首先,您必须chmod +x

然后,将ln命令放入其中以在每次拉动时重新创建硬链接。干嘛!

一切正常,我只需要我的项目,ls -i显示文件在pull之后自动关联。


我的.git/hooks/post-merge示例:

#!/bin/sh
ln -f $GIT_DIR/../apresentacao/apresentacao.pdf $GIT_DIR/../capa/apresentacao.pdf
ln -f $GIT_DIR/../avaliacoesMono/avaliacao_monografias_2011_Nilo.pdf $GIT_DIR/../capa/avaliacoes.pdf
ln -f $GIT_DIR/../posters/poster_Nilo_sci.pdf $GIT_DIR/../capa/poster.pdf
ln -f $GIT_DIR/../monografia/monografia_Nilo.pdf $GIT_DIR/../capa/monografia_Nilo.pdf

重要信息:如您所见,存储库中任何文件的路径应以$GIT_DIR开头,然后将部分相对路径添加到文件中。

同样重要的是:-f是必要的,因为您正在重新创建目标文件。

答案 2 :(得分:7)

从此msysgit issue

  

连接点不是符号链接;因此,符号链接很简单   在msysGit中不受支持。

     

此外,硬链接从未被Git跟踪

这个问题是面向Windows的(因为它是关于msysgit的)以及关于符号链接的潜在支持的争论。
但关于硬链接的评论总体上与Git有关。

答案 3 :(得分:1)

谷歌'git保留硬链接',它表明git不知道如何保留硬链接结构AFAIK,可能是设计。

我的网络项目使用硬链接如下:

www/products/index.php
www/products/dell_latitude_id577/index.php #(hard linked to above)
www/products/dell_inspiron_id323/index.php #(hard linked again to above)

me@server:www/products$ ls -l index.php
-rwxr-xr-x 3 me me 1958 Aug 22 22:10 index.php*

如果我想对index.php进行更改,我会在一个地方更改它,硬链接(产品详细信息页面)指向更改 - 除了git在克隆和拉动其他计算机时不保留此关系。 / p>

me@server:www$ git pull
另一台机器上的

将为每个硬链接创建一个新的index.php。

相关问题