考虑到Git无法识别指向存储库外部的符号链接,使用硬链接是否有任何问题?
Git可以打破他们吗? 能否请您指出详细信息?
答案 0 :(得分:67)
表示Git中目录的“tree”对象存储文件名和(权限子集)权限。它不存储inode编号(或其他类型的文件ID)。因此,硬链接 无法在git 中表示,至少在没有metastore或git-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中不受支持。
此外,硬链接从未被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。