我在git根文件夹中,其绝对路径为/path/project/
。文件夹结构是:
/path/project
---- libs/alib (actual library folder)
---- exec/alib_link (symbolic link to the actual alib folder)
我可以使用相对路径git rm
git rm exec/alib_link
的符号链接
但是使用绝对路径会导致git尝试删除原始文件夹
git rm /path/project/alib_link
fatal: not removing /path/project/libs/alib recursively without -r
如何强制git使用绝对路径删除符号链接而不会导致它尝试删除原始目录?
答案 0 :(得分:3)
我能想到的最好的是使用Perl的Git别名:
rma = "!f() { r=`echo $1 | perl -e 'use Path::Class; $a=file(<>); $r=$a->relative(\".\"); print $r;'`; git rm $r; }; f"
然后你可以做
git rma /path/project/alib_link
从您的存储库中的任何位置,具有所需的效果。
工作原理:
rma
调用shell函数f
。$1
将git rma
(echo
的参数)传递给Perl。 Perl使用<>
读取它。$a
用于指代您尝试使用其绝对路径删除的文件。$r
用于引用您尝试使用其相对于工作目录的路径删除的文件。请注意,运行shell命令的Git别名使用存储库根目录作为其工作目录。$r
。git rm $r
来实际删除该文件。请注意,这也在工作目录(即存储库根目录)中运行。更简洁的版本可能是:
rma = "!f() { git rm `perl -e 'use Path::Class; print file($ARGV[0])->relative(\".\");' $1`; }; f"