从不同的目录执行git pull

时间:2011-10-01 20:02: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"

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

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

cd /home/sas
mkdir calimoucho
cd calimoucho
mkdir checkout
cd checkout
git clone /home/sas/apps/myApp/ 

所以我有以下目录结构

~/apps
    myapp
      .git
      file
~/calimoucho
    checkout
      myapp
        .git
        file

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

我尝试使用以下命令

~/calimoucho$ git --git-dir=/home/sas/apps/myApp/.git --work-tree=/home/sas/calimoucho/checkout/myApp/ pull

我收到以下错误

fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.

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

知道如何从〜/ calimoucho文件夹更新克隆的repo吗?

非常感谢

5 个答案:

答案 0 :(得分:8)

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

运行命令

git -C <git-working-directory> pull <git remote>

回答此问题的具体命令是

git -C checkout/myApp/ pull

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

答案 1 :(得分:2)

这个对我有用:

git --git-dir=/home/myuser/awesomeproject/.git --work-tree=/home/myuser/awesomeproject pull

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

答案 2 :(得分:1)

如果您的git版本不喜欢 git-working-directory 选项:

  

未知选项:-C

然后预先使用 push-directory 命令。

例如,这将从父目录中拉出git项目(如果不存在,则将其克隆):

pushd ./project-name && git pull && popd || git clone https://repo-url/project-name

答案 3 :(得分:0)

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

~/calimoucho/$ git pull --work-tree=checkout/myApp/  ../../apps/myapp

答案 4 :(得分:0)

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

经过数小时的搜索,这对我有用。我在Terminal的Mac上。