git commit symlink as a normal file

问题描述 投票:31回答:4

假设我有一个文件fname,它是到其他存储库/项目中文件的符号链接,例如../../proj2/fname

是否可以将fname添加/提交为常规文件?

似乎,默认情况下,git给出文件模式120000并将链接文件的路径设置为blob内容。

我知道这是因为git ls-tree显示文件的模式120000,而git cat-file -p显示../../proj2/fname作为Blob的内容。

git symlink
4个回答
18
投票

[不,Git知道这是一个符号链接。 Git假装否则将是一种危险,因为它最终将写入回购文件outside。将其作为符号链接进行跟踪正是预期的行为。


49
投票

如果要显示文件而不显示链接,则可能应使用ln命令创建硬链接而不是符号链接(ln -s)。

制作硬链接,您可以使同一文件显示在两个不同的目录下,因此通过任何链接进行更改都会反映两个链接的更改,并且该文件将同时存在于两个目录中,因此将对其进行跟踪通过git

我希望Windows的mklink /j中的Bukov's answer命令可以执行此操作,但我真的不知道。


3
投票

在Windows中,您可以通过结点来完成所需的操作

例如,程序通常将设置文件保存在系统中的某个位置,但是我想在存储库中对其进行版本控制。我无法移动文件,也不想重复或进行任何操作

但是,如果我们将Windows快捷方式放在存储库目录中,他将把它视为二进制的单个文件;不是指向您要包括的所有实际文件的目录

我们需要的功能是在存储库中放入Windows快捷方式,但该git将仅作为另一个文件夹:cd /location/of/my/repo/ mklink /j "_linkTo_VimSettings" "C:\Program Files (x86)\Vim"


0
投票
我也有同样的问题...将带有符号链接文件的目录上载到GIT存储库中,以公开发布。
© www.soinside.com 2019 - 2024. All rights reserved.