我想将我的存储库代码部署到A / B
我希望.git信息存储在A / B / C
中找到的另一个文件夹中以下是我的尝试:
git --work-tree = A / B --git-dir = A / B / C clone git @ bitbucket:myrepo / is / here
结果:
存储库IS克隆到A / B
.git信息存储在文件夹A / X中,其中X是存储库的名称(不是A / B / C)。
为什么会这样?为什么.git信息没有转到A / B / C,为什么它会创建一个隐藏文件夹,其中包含存储库的标题来保存git信息呢?
答案 0 :(得分:3)
git-clone
不接受git-dir
命令。它与git-init
一样,在命令行中获取存储库路径的参数。
如果要与存储库分开指定工作目录的位置,请指定要克隆的directory
参数(同时继续指定--work-tree
):
git --work-tree=worktree clone ssh://repo/url repo
这将创建一个存储库目录repo
,以及一个名为worktree
的工作树。
请注意,在您的示例中,您使用A/B
表示工作树,A/B/C
表示存储库。你可以这样做,但你不应该这样做。如果您希望工作树位于工作树下,则应保留名为.git
的存储库。否则,您的工作树中可能有一个目录C
,然后在存储库的文件和工作树文件之间混淆。那非常糟糕。
现在,如果你的命令不起作用,为什么git不抱怨呢?嗯,坦率地说,很可能没有人想到这种互动。请参阅,git的实现方式是您可以将参数指定为git ,并且可以指定命令的参数(例如 git-clone )。例如:
git --global-arguments command --command-arguments
例如,您可以使用类似--version
的参数(这是一个全局命令)来查看它,并且将运行并忽略您指定的命令:
% git --version push
git version 2.3.2 (Apple Git-55)
但是如果你试图将其指定为推送的参数,它将失败:
% git push --version
error: unknown option `version'
由于--git-dir
是一个全局选项,所以所有命令都可以利用它,git-clone
无法选择是否可以接受它。 (虽然它似乎可能是一个错误,它默默地忽略了这个论点。)