Git和硬链接

Alf*_*res 84 linux git hyperlink hardlink

考虑到Git不识别指向存储库外部的符号链接,使用硬链接是否有任何问题?

Git可以打破他们吗?你能指点我详细的信息吗?

Jak*_*ski 73

表示Git中目录的"tree"对象存储文件名和(权限子集)权限.它不存储inode编号(或其他类型的文件ID).因此,硬链接 不能用git表示,至少不能没有第三方工具,例如metastoregit-cache-meta(我不确定即使使用这些工具也是如此).

Git试图不触及它不需要更新的文件,但你必须考虑到git不会试图保留硬链接,所以它们可以被git打破.


关于指向存储库外部的符号链接:git没有问题,应该保留符号链接的内容......但是这些链接的实用程序对我来说是不确定的,因为这些符号链接是否会被破坏取决于git存储库之外的文件系统布局,而不是git的控制.

  • 是的,回购之外的符号链接很好.我用它们指向一个我不需要(或想要)版本化的海量数据目录.通常我使用相对链接.因此,在可能的情况下,repo和数据目录必须在某个父目录中彼此相邻.您可以使用符号链接来实现令人惊奇的技巧./foo. (5认同)
  • 与回购外部路径的符号链接可能很有用。我已在webapps中使用它们来指向存储库未跟踪的数据库或媒体文件。这样,Web应用程序的配置文件可以指向静态路径,但是该路径的实际位置在本地开发环境和服务器环境之间可能会有所不同。 (4认同)

Nil*_*oct 19

好的,现在这是迟到的回复= 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
Run Code Online (Sandbox Code Playgroud)

重要信息:如您所见,存储库中任何文件的路径都应该以该文件开头$GIT_DIR,然后添加文件的部分相对路径.

同样重要的是:-f是必要的,因为您正在重新创建目标文件.

  • 所以看起来每次向repo添加硬链接时,您还需要手动为合并后的钩子脚本添加一行.如果您的预提交钩子使这个全自动 - 在您的提交中检测硬(和符号)链接并将合适的行写入合并后文件,那将会很好.Git不必在repo中存储inode信息,它会将它存储在钩子中!但是如果在另一个git repo中跟踪链接文件会有多么混乱...在一个地方编辑文件会顺利地传播到另一个存储库吗?永久合并圆形推/拉环? (10认同)

Von*_*onC 7

从这个msysgit问题

连接点不是符号链接; 因此,msysGit中根本不支持符号链接.

此外,Git从未跟踪过硬链接.

这个问题是面向Windows的(因为它是关于msysgit)和关于symlink的潜在支持的争论.
但关于硬链接的评论总体上与Git有关.