我在我正在使用的脚本中看到了这一行:
git config core.worktree ..
Run Code Online (Sandbox Code Playgroud)
我不确定 git worktree 做什么,但我绝对不明白为什么将其设置为..
有什么线索吗?谢谢
让\xe2\x80\x99s 说我有一个包含子模块的Git 存储库:
\n$ mkdir main-worktree\n$ cd main-worktree\n$ git init\nInitialized empty Git repository in /\xe2\x80\xa6/main-worktree/.git/\n$ git submodule add https://github.com/octocat/Hello-World.git Hello-World\nCloning into \'/\xe2\x80\xa6/main-worktree/Hello-World\'...\nremote: Enumerating objects: 13, done.\nremote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13\nReceiving objects: 100% (13/13), done.\n$ git commit -m \'Create submodule\'\n[main (root-commit) 66070b6] Create submodule\n 2 files changed, 4 insertions(+)\n create mode 100644 .gitmodules\n create mode 160000 Hello-World\nRun Code Online (Sandbox Code Playgroud)\n\n$ git worktree add ../secondary-worktree\nPreparing worktree (new branch \'secondary-worktree\')\nHEAD …Run Code Online (Sandbox Code Playgroud) 最新版本的IntelliJ表示它支持git工作树,但我似乎无法找到任何说明如何使用它的地方.我期待在右下方的Git Branches弹出窗口中看到一个条目,但我没有在那里看到它.
IntelliJ帮助和谷歌搜索也没有帮助
我正在使用Git版本2.7.2.0,2.5中引入了工作树
我想在工作树上使用本地文件排除。我尝试添加文件名,.git/worktrees/$worktreename/info/exclude但没有成功。类似的文件.git/info/exclude可以工作,但适用于所有工作树,而不仅仅是主工作树。
我从 GitHub 克隆了一个存储库,并使用以下命令创建了一些工作树:
git worktree add -path- -branch-
Run Code Online (Sandbox Code Playgroud)
当我从 中提取更改时master,这些工作树也会更新吗?
我们有一个被多个用户使用的服务器。磁盘空间是一个很大的限制,因为我们的 git repo 非常大,每次有人克隆它时,它都会消耗 130G 的空间。
我知道 git 不是设计为集中式工作流,但这是一种非常特殊的情况。我们考虑过升级硬件,但这是一条很长的路,因为它不是云实例。
我试着摆弄,git worktree但很快就遇到了权限问题。我的理想设置是一个单一的存储库,多个用户可以通过它推送和拉取。
我查看了以前的线程,但不幸的是那里没有可靠的建议,而且它们是很旧的线程。因此,任何新的建议将不胜感激。
我有一个顶级项目,有大约 10 个子模块和一些嵌套子模块。
./top-project/
./top-project/module-a
./top-project/module-b
...
Run Code Online (Sandbox Code Playgroud)
一些子模块有一个经典的 url,如url = git:software/module-a,其他子模块有一个相对于远程顶级项目的 url,如url = ../module-b。顶级项目 url 是url = git:software/top-project.
我想创建顶级项目及其所有子模块的工作树副本。
git worktree add -f ../top-project-v2
Run Code Online (Sandbox Code Playgroud)
但我找不到一种方法使子模块指向其原始路径。我希望top-project-v2/module-agit 指向top-project/module-a,而不是克隆一个全新的模块-a。
如果我这样做cd top-project-v2; git submodule upate --init --recursive,命令会成功,但子模块不会链接到顶级项目子模块。
如果我这样做git checkout --recurse-submodules origin/v2,我会得到一个错误:
git checkout --recurse-submodules origin/v2
fatal: not a git repository: ../../top-project/.git/worktrees/top-project-v2/modules/module-a
fatal: could not reset submodule index
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到吗?
我有一个空的 Git 存储库(即它尚未包含任何提交)。git worktree add有没有办法使用命令(带有--no-checkout选项)为此存储库创建工作树?我的意思是指示 Git 不要将新创建的工作树与任何工作树关联HEAD。
我最近开始使用git worktree,非常棒。但是,我不确定如何使其与 Docker 一起工作。这是我的流程:
repo-a有一个 dockerFile 来构建本地容器。
我创建一个新的工作树,这样git worktree add branch-a将创建一个名为branch-abranch的文件夹branch-a。
我收到了要审核的 PR,我需要切换到branch-b. 所以我回到我的--bare clone仓库,然后我就这么做了git worktree add branch-b。并 cd 进入该文件夹。
我的 docker 容器无法捕获新文件,因为它仍然链接到 on 上的文件branch-a,如果我docker-compose up -d这样做branch-b,它会抛出一个错误,指出The container name "/<name here>" is already in use by container "31344e3448df72e032c42a96d078ea57c11a75023d197e9ab0683e7c773f54e4"
如何让我的 docker 容器监听不同文件夹上的更改?
我想在调用命令时运行 shell 脚本git worktree add。阅读文档post-checkout似乎它会运行,git worktree add但它也会运行我不想使用它的其他命令,例如git checkout.
还有其他我可以使用的钩子吗?或者也许我可以使用结账后但有脚本设置,这样如果不是命令它就会退出git worktree add?
我想要这样做的原因是运行一组命令来设置运行时所需的目录git worktree add,但我不需要为仅使用git checkout命令的普通 git 存储库执行此设置。