从不同的目录执行git pull

ope*_*sas 10 git git-pull

我正在配置calimoucho(一个小游戏连续集成服务器),为了它工作,我需要运行一个命令从外部拉一个克隆的git hub存储库.

更确切地说,我将用一个例子来解释它.

我有以下存储库

cd /home/sas
mkdir apps
cd apps
mkdir myApp
cd myApp
git init
echo "my file" > file
git add .
git commit -m "initial commit"
Run Code Online (Sandbox Code Playgroud)

只是一个愚蠢的测试存储库,我的应用程序被用于

现在我需要将该存储库克隆到checkout文件夹.

cd /home/sas
mkdir calimoucho
cd calimoucho
mkdir checkout
cd checkout
git clone /home/sas/apps/myApp/ 
Run Code Online (Sandbox Code Playgroud)

所以我有以下目录结构

~/apps
    myapp
      .git
      file
~/calimoucho
    checkout
      myapp
        .git
        file
Run Code Online (Sandbox Code Playgroud)

continuos集成服务器必须从〜/ apps/myapp将新的更改提取到〜/ calimoucho/checkout/myapp,从〜/ calimoucho运行命令行语句

我尝试使用以下命令

~/calimoucho$ git --git-dir=/home/sas/apps/myApp/.git --work-tree=/home/sas/calimoucho/checkout/myApp/ pull
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.
Run Code Online (Sandbox Code Playgroud)

如果我没有指定--work-tree选项,则会发出pull,但更改将应用​​于〜/ calimoucho文件夹而不是〜/ calimoucho/checkout/myApp

任何想法如何从〜/ calimoucho文件夹更新克隆的回购?

非常感谢

小智 17

我也有这个问题.我在git文档(https://git-scm.com/docs/git)中找到了答案.

运行命令

git -C <git-working-directory> pull <git remote>
Run Code Online (Sandbox Code Playgroud)

回答这个问题的具体命令是

git -C checkout/myApp/ pull
Run Code Online (Sandbox Code Playgroud)

请注意,-C <git-working-directory>pull命令之前很重要,并且可以在命令末尾指定任何其他pull选项.在上面的示例中,该git clone命令将设置默认的远程存储库〜/ apps/myapp,因此不需要指定远程存储库.


小智 15

git -C ~/Documents/blar/blar/directory/ pull

经过几个小时的搜索后,这对我有用。我在 Mac 上的终端上。

  • 这个答案不会为@Danny 已经提供的答案添加任何内容。 (2认同)

Lan*_*nce 7

这个对我有用:

git --git-dir=/home/myuser/awesomeproject/.git --work-tree=/home/myuser/awesomeproject pull
Run Code Online (Sandbox Code Playgroud)

我在更新后挂钩中使用它来自动拉取并重新启动我的测试服务器上的 pm2。


rya*_*ntm 1

您不应将工作树设置为与 git-dir 变量不同的存储库。我认为当您不希望 .git 文件夹与工作树位于同一目录中时,应该使用它们。而是尝试这个:

~/calimoucho/$ git pull --work-tree=checkout/myApp/  ../../apps/myapp
Run Code Online (Sandbox Code Playgroud)