我正在配置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吗?
非常感谢
答案 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上。