--git-dir不使用给定的文件夹,而是使用存储库名称创建另一个文件夹

时间:2015-10-02 09:32:39

标签: git

我想将我的存储库代码部署到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信息呢?

1 个答案:

答案 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无法选择是否可以接受它。 (虽然它似乎可能是一个错误,它默默地忽略了这个论点。)