考虑到Git无法识别指向存储库外部的符号链接,使用硬链接是否有任何问题?
Git可以打破它们吗?您能给我指出详细的信息吗?
考虑到Git无法识别指向存储库外部的符号链接,使用硬链接是否有任何问题?
Git可以打破它们吗?您能给我指出详细的信息吗?
Answers:
代表Git中目录的“树”对象存储文件名和(子集)权限。它不存储索引节点号(或其他类型的文件ID)。因此,硬链接 无法在git中表示,至少在没有第三方工具(例如metastore或git-cache-meta)的情况下(而不是即使使用那些工具也无法确定)。
Git尝试不触摸不需要更新的文件,但是您必须考虑到git不会尝试保留硬链接,因此它们可能会被git破坏。
关于指向外部存储库的符号链接:git没问题,应该保留符号链接的内容...但是这种链接的实用性对我来说还是个疑问,因为这些符号链接是否断开取决于git存储库之外的文件系统布局,并且不受git的控制。
我发现,使用钩子可以捕获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
是必需的,因为您正在重新创建目标文件。
谷歌“ git保持硬链接”,它表明git不知道如何保持硬链接结构AFAIK,也许是设计使然。
我的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
在另一台计算机上,将为每个硬链接创建一个新的index.php。
hardlink --ignore-time
上进行/var/lib/jenkins
,以回收一些磁盘空间。在一天中,某些文件在之后git pull
或之后再次取消链接,mvn compile
但这没关系,我希望这种情况会发生。如果git保留硬链接,那么我的磁盘空间回收策略将行不通。