git fetch / pull file“成为”符号链接

时间:2014-01-20 14:50:49

标签: git

我有一个私人git仓库,用ssh访问。 (例如git@myhost.com:/home/git

里面有一个PHP项目。我的发展和部署机器都是linux。它适用于大约半年。

但是现在,当我运行git pull(或clone到其他地方)时,项目根目录中的文件“变成”符号链接。

很难解释。所以粘贴这些:


ls -al

一些输出:

drwxr-xr-x 10 nginx nginx 4096 Jan 20 22:08 App
drwxr-xr-x 10 nginx nginx 4096 Jan 20 22:08 .git
drwxr-xr-x 10 nginx nginx 4096 Jan 20 22:08 Core
lrwxrwxrwx 10 nginx nginx 4096 Jan 20 22:06 index.php -> <?phpdefine('APP_PATH','./App');define(..........(FULL content OF index.php)
lrwxrwxrwx 10 nginx nginx 4096 Jan 20 22:08 .gitignore -> # ide.idea#temp files_runtime*.log..........(FULL content OF gitignore)

我知道linux符号链接是一个包含“目标文件路径”的文件,并且有一个特殊的“标记”。

每次pull / resetgit都会将这些文件标记为符号链接(实际上是普通文件),我不知道如何删除该标志

这仅适用于项目根目录中的文件(.git dir旁边),适用于所有人

有人可以帮助我解决我的git repo发生的事情吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用以下符号确认所有这些文件是符号链接:

 git ls-files -s ./aFile
 120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0       aFile

您应该在索引中看到它们采用120000模式,引用实际对象内容的哈希值,您可以使用以下内容查看:

git cat-file -p 1596f9db1

请参阅“What does git do to files that are a symbolic link?

您可以尝试恢复所有文件(从索引中删除文件,使用cat-file -p命令的内容重新创建)。

但我宁愿查看回购的历史记录,看看我是否无法重置为将这些文件记录为实际文件而不是符号链接的状态。

答案 1 :(得分:0)

我想我找到了原因......

我正在使用WebStorm&amp; PhpStorm在同一个项目上。

两个IDE使用不同版本的插件和不同的工作空间状态(打开的文件等)

因此.idea目录必须不同,我制作另一个目录,软链接除项目根目录中的“.idea”之外的所有文件和文件夹到另一个目录。

Normaly我使用PhpStrom的Git gui来上传我的文件,几周前,我使用WebStorm推送提交。

最后,我使用以下方式恢复文件:

find . -maxdepth 1 -type l -exec bash -c -t 'mv "{}" "{}".bak ; readlink "{}.bak">"{}" ; rm -f "{}.bak"' \;