gpt4 book ai didi

带有相对路径的git worktree?

转载 作者:行者123 更新时间:2023-12-04 11:44:54 25 4
gpt4 key购买 nike

我有一个 master和一个 setup在我的 repo 中分支。我保留了 setup分支 check out 作为主 repo 文件夹内的工作树通过

git worktree add ./local/setup
echo '/local' > .gitignore
所以主 repo 文件夹位于 master ,以及 local/setup文件夹位于 setup .一切都很好,花花公子,我可以处理我的 setup文件无需切换分支,我可以从 local/setup 内提交等等。
但是,如果我尝试移动整个存储库,或从不同的 Linux 引导访问它( /home/myrepo 变为 /mnt/ubu/home/myrepo ),事情就会中断。问题似乎是 git的工作树功能记录绝对路径,在
myrepo/.git/worktrees/setup/gitdir
myrepo/local/setup/.git
我可以将这些转换为相对路径以使 repo + 嵌入式工作树可重定位吗?我不确定这些文件中的路径应该相对于什么,但我可以进行试验。这种设置危险吗?

最佳答案

我在这里制作了一个简单的 bash 脚本供我个人使用:
https://github.com/Kristian-Tan/git-worktree-relative
请注意,这个答案只是从我的 README.md 复制粘贴
...
我的解决方案

  • 用于替换 {worktree}/.git file 内容的 Bash 脚本和 {repo}/.git/worktrees/{wtname}/gitdir
  • 为什么使用 bash:几乎每个使用 git 的人都会在某种类似 bash-shell 的环境中使用它(例如:linux 中的 bash shell,Windows 中的 git bash)
  • 要求(应该在每个 bash shell 上都可用):
  • cat
  • echo
  • readlink
  • realpath (自 2012 年以来的 GNU 实用程序,可能不会预装在像 debian wheezy 这样非常旧的 linux 系统中)
  • sed
  • pwd
  • bash shell 参数扩展 ${parameter/pattern/string}${parameter%%word} https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion

  • 另一个 bash 脚本将其改回绝对路径(因为 git worktree remove 可能会拒绝相对路径)

  • 用法
  • 在您的工作树中执行脚本(或在 -w 选项中提供工作树目录路径)
  • 它将从 {worktree}/.git 读取存储库的路径文件
  • 选项:
  • -v = 详细(尚未实现)
  • -w worktree_target = 要使工作树相对的目录(如果未提供,将默认为当前目录)
  • -r repository_target = 存储库目录(包括 .git 中的工作树目录,如果未提供,将从 {worktree_target}/.git 文件中读取)
  • -h = 显示帮助

  • 此解决方案适用于断开的链接(例如:移动工作树目录或移动父 git 目录):只需在 -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
  • 存储库在 /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
  • 要检测链接是否损坏,请在工作树目录中运行命令“git status”

  • 将相对工作树反转回绝对:只需更改 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
  • 或这一行: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.shgit-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
  • 一个用户的安装:
  • 将其复制到添加到 PATH 变量的任何目录


  • 卸载
  • 只需删除复制的文件(或仅使用 uninstall.sh 脚本: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)"

  • ...
    学分
  • [已删除] BR0kEN- ( https://gist.github.com/BR0kEN-/a84b18717f8c67ece6f7 )
  • 对 strpos 和 substr 的 Bash 实现
  • StackOverflow 用户 usretc咨询 git worktree with relative path?
  • 关于带有相对路径的git worktree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66635437/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com