我的回购中有一个master和一个setup分支。我将setup分支作为工作树在主 repo 文件夹中通过
git worktree add ./local/setup
echo '/local' > .gitignore
Run Code Online (Sandbox Code Playgroud)
所以主 repo 文件夹是 on master,local/setup文件夹是 on setup。一切都很好,我可以处理我的setup文件而不必切换分支,我可以从内部提交local/setup等等。
但是,如果我尝试移动整个存储库,或者从不同的 Linux 引导(/home/myrepo变成/mnt/ubu/home/myrepo)访问它,事情就会中断。问题似乎是git's worktree 功能记录了绝对路径,在
myrepo/.git/worktrees/setup/gitdir
myrepo/local/setup/.git
Run Code Online (Sandbox Code Playgroud)
我可以将这些转换为相对路径以使 repo + 嵌入式工作树可重定位吗?我不确定这些文件中的路径应该相对于 什么,但我可以进行试验。这种设置危险吗?
我在这里制作了一个简单的 bash 脚本供我个人使用:
https://github.com/Kristian-Tan/git-worktree-relative
请注意,这个答案只是从我的 README.md 复制粘贴
...
{worktree}/.git file和的Bash 脚本{repo}/.git/worktrees/{wtname}/gitdircatechoreadlinkrealpath (自 2012 年以来的 GNU 实用程序,可能不会预装在像 debian wheezy 这样的非常旧的 linux 系统中)sedpwd${parameter/pattern/string}和${parameter%%word} https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansiongit worktree remove可能拒绝相对路径){worktree}/.git文件中读取存储库的路径-v = 详细(尚未实现)-w worktree_target = 要相对的工作树目录(如果未提供,将默认为当前目录)-r repository_target = 存储库目录(包括 .git 中的工作树目录,如果未提供,将从 {worktree_target}/.git 文件中读取)-h = 显示帮助-r repositor_target标志中提供存储库路径/home/myuser/repo/myproject;工作树在/home/myuser/www/myproject;工作树与存储库连接(链接未断开)
cd /home/myuser/www/myproject
git-worktree-relative
# OR
git-worktree-relative -w /home/myuser/www/myproject
Run Code Online (Sandbox Code Playgroud)
/home/myuser/repo/myproject;工作树在/home/myuser/www/myproject;工作树未与存储库连接(链接已损坏)
cd /home/myuser/www/myproject
git-worktree-relative -r /home/myuser/repo/myproject/.git/worktrees/myproject
# OR
git-worktree-relative -w /home/myuser/www/myproject -r /home/myuser/repo/myproject/.git/worktrees/myproject
Run Code Online (Sandbox Code Playgroud)
git-worktree-relative使用git-worktree-absolute(相同的命令行参数)
更改命令git worktree remove要求路径是绝对路径:您可以使用此反向脚本在删除之前将其恢复为绝对路径git clone https://github.com/Kristian-Tan/git-worktree-relative.git
cd git-worktree-relative
sudo bash install.sh
Run Code Online (Sandbox Code Playgroud)
git clone https://github.com/Kristian-Tan/git-worktree-relative.git ; cd git-worktree-relative ; sudo bash install.sh/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Kristian-Tan/git-worktree-relative/HEAD/get)"git-worktree-relative.sh并复制git-worktree-absolute.sh到/usr/bin或/bin(您也可以删除扩展名) cp git-worktree-relative.sh /usr/bin/git-worktree-relative
cp git-worktree-absolute.sh /usr/bin/git-worktree-absolute
chown root:root /usr/bin/git-worktree-relative
chown root:root /usr/bin/git-worktree-absolute
chmod 0755 /usr/bin/git-worktree-relative
chmod 0755 /usr/bin/git-worktree-absolute
Run Code Online (Sandbox Code Playgroud)
git clone https://github.com/Kristian-Tan/git-worktree-relative.git ; sudo bash git-worktree-relative/uninstall.sh)/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Kristian-Tan/git-worktree-relative/HEAD/remove)"...
usretc在git worktree 中使用相对路径提供建议?| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |