考虑到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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top