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。