【问题标题】:Symlinks not recognized when pulled from git从 git 中提取时无法识别符号链接
【发布时间】:2017-11-13 07:44:31
【问题描述】:

我在 git 中有一个项目,当我第一次从 git 进行符号链接时,符号链接不起作用。据我所知,它们是正确制作的符号链接。如果我删除符号链接并自己重新创建它们,git 也会认为它们与它拥有的符号链接相同。

如果符号链接来自 git,Linux 或 Git 中是否存在阻止符号链接工作的设置?

用于创建符号链接的命令:

ln -s /absolute/path/to/dest symlink-name

一些附加信息

  • 符号链接最初是在 MacBook 上创建的,但由于 git 将我新创建的符号链接(在 linux 上)视为相同,我怀疑这是问题所在。
  • 第一次获取符号链接时,它们在 linux 上不起作用,但在其他 Mac 机器上却可以。
  • 在通过删除和重新创建符号链接来修复它们后,git 将它们视为相同的,因此它们不会在未来的 pull 中被覆盖。
  • 所有符号链接都指向 .phar 文件。
  • Linux 机器运行的是 Ubuntu 16.04 或 Centos 7

使用ls -lah 将符号链接列为常规文件:

-rw-rw-r--.  1 vagrant vagrant   28 Nov 13 09:01 dep
-rw-rw-r--.  1 vagrant vagrant   28 Nov 13 09:01 drupal
-rw-rw-r--.  1 vagrant vagrant   20 Nov 13 09:01 drush
-rw-rw-r--.  1 vagrant vagrant   32 Nov 13 09:01 drush.complete.sh
-rw-rw-r--.  1 vagrant vagrant   29 Nov 13 09:01 drush.launcher
-rw-rw-r--.  1 vagrant vagrant   24 Nov 13 09:01 drush.php
-rw-rw-r--.  1 vagrant vagrant   33 Nov 13 09:01 php-parse
-rw-rw-r--.  1 vagrant vagrant   26 Nov 13 09:01 phpunit
-rw-rw-r--.  1 vagrant vagrant   22 Nov 13 09:01 psysh

然而,如果我手动删除并重新创建 dep 符号链接,它会正确显示。 Git 仍然认为这是相同的,没有进行任何更改。

lrwxrwxrwx.  1 vagrant vagrant   28 Nov 13 09:33 dep -> ../deployer/deployer/bin/dep

将损坏的符号链接上的权限表单-rw-rw-r-- 更改为lrwxrwxrwx,也不能修复它们。

非常感谢任何帮助。

【问题讨论】:

  • 你是什么意思他们“不工作”?他们是如何失败的? ls 显示什么?它们有什么特殊字符吗?
  • @EdwardThomson 我已经编辑了帖子以包含此类信息,感谢您的提问,因为我没想过提供这些信息。
  • 你为什么写\absolute\path? `` 在 Linux 上不是路径分隔符。
  • @JohnZwinck 只是一个路径占位符,所以我不需要输入实际路径,尽管稍后在我的帖子中被否定了,在示例中错误地使用了 \` , 将得到修复。 (实际符号链接正确使用/

标签: linux git unix symlink


【解决方案1】:

您的某个配置文件已关闭core.symlinks 设置。要找出设置的位置,请运行:

for location in global system local; do
    git config -l --$location |& grep -q symlinks && echo $location
done

这将输出是否设置在全局、系统或本地位置。

全局位置通常是$HOME/.gitconfig系统位置通常是/etc/gitconfig本地位置通常是@987654325 @ 在当前存储库中。

删除该行,Git 应该能够正确创建符号链接。

【讨论】:

  • show-origin 似乎不是一个有效的选项(使用 git 1.8.3.1)
  • 对,这是一个较新的设置。我已经更新了一些可以枚举配置位置的 shell。
  • 我在本地配置中有它,似乎 SourceTree 在 Windows 机器上自动将其设置为 false,但在 mac 上从未设置过。
  • 正确 - 它应该在 Windows 上设置为 false(并且仅在 Windows 上)。这是在您创建存储库时实际检测到的设置,并缓存在本地存储库配置中(这样您就不必经常检测文件系统的功能)。由于此(和其他)配置缓存,您无法在两个系统之间共享工作目录。
猜你喜欢
  • 1970-01-01
  • 2012-09-20
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 2016-01-25
相关资源
最近更新 更多