如何在符号链接文件夹中制作 git commit 文件

Mac*_*cha 27 symbolic-link git

我有两个文件夹:

  • /home/me/code/project/
  • /srv/www/projectfiles/

/home/me/code/project文件夹中,我已符号链接static/srv/www/projectfiles/

/home/me/code/project/static/->/srv/www/projectfiles/

当我现在尝试提交时,它看不到符号链接后面的任何文件,而是尝试将符号链接本身作为文件提交。

如何提交/srv/www/projectfiles/style.css位于符号链接后面的文件(例如)?

mmm*_*mmm 14

一种解决方法是让 /srv/www/projectfiles 成为 /home/me/code/project/static 的符号链接,因此 git 看不到符号链接

  • 所以你基本上是在颠倒逻辑?将所需的文件/文件夹保留在 Git 文件夹中,然后将符号链接放在其他地方(原始文件/文件夹曾经驻留的位置)? (2认同)

Mar*_*ark 10

如果你使用的是 linux,我特别喜欢GitBLSR提供的解决方案。它是一个通过 LD_PRELOAD 加载的库,它透明地将符号链接解引用到存储库外的文件和文件夹。

为本地用户帐户安装它很简单:

git clone https://github.com/Alcaro/GitBSLR.git
cd GitBSLR
./install.sh
Run Code Online (Sandbox Code Playgroud)

这将编译库并创建一个如下所示的别名~/.bashrc

alias git="LD_PRELOAD=/path/to/gitbslr.so git"
Run Code Online (Sandbox Code Playgroud)

使用此别名可启用透明链接解除引用。

  • 作为一个对什么是好的做法没有直觉的 git 和 linux 菜鸟,为什么这很可怕和奇怪?是不是因为命令`git` 现在有点“掺假”,那是hacky 而不是纯粹/干净/整洁? (4认同)
  • 这太可怕了!但它工作得很好,所以很棒。谢谢! (2认同)

小智 6

考虑使用挂载点来挂载目标文件夹(您当前符号链接到的文件夹)以显示在 git 项目下您想要的位置。我已经成功地使用了这种方法。

例子:

#!/bin/sh
sudo mount --bind ./src_folder ./dst_folder
Run Code Online (Sandbox Code Playgroud)