题
考虑到GIT无法识别存储库之外的符号链接,使用硬链接有任何问题吗?
Git可以打破他们吗?您能指出我详细信息吗?
解决方案
“树”对象,代表git中的目录,存储文件名和权限的(子集)。它不存储INODE号码(或其他类型的文件ID)。所以 硬链接 不能在git中代表, ,至少没有第三方工具,例如 Metastore 或者 git-cache-meta (而且我不确定即使使用这些工具)。
GIT试图不触摸它不需要更新的文件,但是您必须考虑到Git不会试图保留硬链接,因此可以通过git打破它们。
关于 指向外部存储库的符号链接: :git对它们没有问题,应该保留符号链接的内容...但是这种链接的实用性对我来说是可疑的,就像这些符号是否会被损坏,这取决于文件系统布局 外部 GIT存储库,而不是控制GIT。
其他提示
好,现在这是一个迟到的回复= 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
是必要的,因为您正在重新创建目标文件。
由此 MSYSGIT问题
接线点不是符号链接;因此,符号链接在MSYSGIT中根本不支持。
还, git从未跟踪硬连接.
这个问题是面向Windows的(因为它与MSYSGIT有关),并争论Symlink的潜在支持。
但是关于硬链接的评论通常涉及Git。
Google的“ git保存硬链接”,这表明git不知道如何通过设计保存硬链接结构。
我的网络项目使用硬链接如下:
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。