Git和硬链接

考虑到Git不能识别指向仓库之外的符号链接,使用硬链接有什么问题吗?

Git可以打破它们吗? 你能指点我详细的信息吗?

表示Git中的目录的“树”对象存储文件名和(子集)权限。 它不存储inode号码(或其他types的文件ID)。 因此, 硬链接 不能在git中表示 ,至less不是没有第三方工具,如metastore或git-cache-meta (我不确定这些工具是否可能)。

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


关于指向仓库之外的符号链接 :git没有任何问题,并且应该保留符号链接的内容……但是这些链接的实用性对我来说是可疑的,因为这些符号链接是否会被破坏取决于git仓库之外的文件系统布局,而不是在git的控制之下。

好的,现在这是一个晚回复= D

我发现,使用钩子,你可以捕获git pull事件(当有东西要拉…)将脚本事件处理程序.git/hooks/post-merge文件。

首先,你必须chmod +x它。

然后,将ln命令放入其中,以在每次拉动时重新创build硬链接。 整洁吧!

它的工作原理,我只需要为我的项目和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 

重要提示:如您所见,存储库中任何文件的path应以$GIT_DIR ,然后将相对path添加到文件中。

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

从这个msysgit问题

交汇点不是符号链接; 因此,msysGit中不支持符号链接。

另外, 硬链接从来没有被Git跟踪过

这个问题是面向Windows(因为它是关于msysgit)和关于符号链接的潜在支持的争论。
但是关于硬链接的评论关注Git。

谷歌“混帐保存硬链接”,它表明,GIT不知道如何保留硬链接结构AFAIK,也许是通过devise。

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

 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在克隆和拉动其他计算机时不保留此关系。

 me@server:www$ git pull 

在另一台机器上会为每个硬链接创build一个新的index.php。