给定一个仓库中的两个普通文件夹:
drwx------ dir_a/
drwx------ dir_b/
我将dir_b
转换为一个指向dir_a
的相对符号链接(即rm -rf dir_b
和ln -s dir_a dir_b
),现在它看起来像这样:
drwx------ dir_a/
lrwxrwxrwx dir_b -> dir_a/
在提交、推送和拉取到另一台机器上后,我发现dir_b
显示为普通文件而不是文件夹的符号链接。
$ ls -al
drwx------ dir_a/
-rw------- dir_b
尝试使用
git checkout dir_b
移除dir_b
并将其还原,但它仍然被重新创建为文件,而不是文件夹符号链接。文件系统是支持符号链接的ext4。事实上,在同一分区上进行全新的git clone
确实会像预期的那样创建dir_b
作为符号链接。如果可能有影响,我会提到实际名称
dir_b
以一个点开头(例如.dir_b
)。
git clone
正常工作,所以我可以将其用作解决方法,但我想知道发生了什么以及还原符号链接文件夹的正确方法,因为显然git checkout symlinked_folder
不会像在原始repo中那样重新创建文件夹。
git clone
正常工作且您没有在出现问题的存储库中禁用符号链接,那么这似乎是一个明显的错误。如果您已经禁用了符号链接(通过将core.symlinks
设置为false
),请重新启用它们。 - torekgit config -l | grep symlinks
返回core.symlinks=false
。 - ccpizzacore.symlinks
为false。” - torekgit config --global core.symlinks true
命令,并在没有--global
的情况下重复了一次,只针对该仓库进行设置,然后git checkout dir_b
就正常工作了。现在我意识到发生了什么:最初克隆到了手机的 SD 卡上,而该卡是 FAT 格式,所以符号链接被设置为 false,然后我将仓库移动到了内部的 EXT4 分区。请在答案中添加您的评论,以便我可以接受它。 - ccpizza--global
来设置它,因为它是针对每个仓库的(就像core.bare
和core.repositoryformatversion
一样)。 - torek