53

我正在配置calimoucho(一个小的 play continuos 集成服务器),为了让它工作,我需要运行一个命令从外部提取一个克隆的 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"

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

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

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 选项,则会发出拉取,但更改将应用​​于 ~/calimoucho 文件夹而不是 ~/calimoucho/checkout/myApp

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

多谢

4

6 回答 6

95

我也有这个问题。我在 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,因此不需要指定远程存储库。

于 2018-02-01T15:38:56.037 回答
8

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

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

于 2020-12-15T01:55:54.473 回答
7

这个对我有用:

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

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

于 2018-09-28T19:09:58.123 回答
2

就我而言,这只是可行的解决方案:

git --git-dir=/gitbackup/test/.git pull
于 2021-11-08T10:51:13.063 回答
1

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

~/calimoucho/$ git pull --work-tree=checkout/myApp/  ../../apps/myapp
于 2011-10-01T20:14:12.850 回答
1

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

未知选项:-C

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

例如,这将从父目录中提取您的 git 项目(如果不存在则克隆):

pushd ./project-name && git pull && popd || git clone https://repo-url/project-name
于 2019-06-13T11:26:00.373 回答