Git pull cause文件被删除

时间:2015-11-28 05:08:28

标签: git ubuntu sh

我创建了一个shell脚本,它在我的服务器启动时运行。 它的目标是从我的远程存储库中提取最新更新:

#!/bin/sh
branch="production_test";
git --git-dir=/var/www/html/.git checkout -b $branch 
git --git-dir=/var/www/html/.git pull https://username:password@bitbucket.org/my/path/to/repository.git $branch

为了测试它,我将一个名为test.file的文件添加到我的本地存储库中,提交它并将其推送到远程存储库。

首先,当我重新启动服务器时,我认为脚本没有运行,因为在我的/var/www/html文件夹中没有任何变化。

,当我这样做时git status它告诉我test.file被标记为已删除。

当我做git log时,我看到我最后一次提交。

如果我在服务器中手动运行我的脚本 - 它运行正常。

导致这种情况的原因是什么?也许Ubuntu有某种层可以防止文件变化(我只是在黑暗中拍摄)?

更新

这是我将std和stderr重定向到的日志文件的输出:

fatal: A branch named 'production_test' already exists.
From https://bitbucket.org/my/path/to/repository.git
 * branch            production_test -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 test.file | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.file
fatal: A branch named 'production_test' already exists.
From https://bitbucket.org/my/path/to/repository.git
 * branch            production_test -> FETCH_HEAD
Already up-to-date.

这是重启后git status命令的输出:

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    test.file

我能够从输出中了解bash脚本可能通过2个rc.d启动命令运行两次。但它没有解释这种行为。

1 个答案:

答案 0 :(得分:0)

好的,所以我在这里得到了其他答案的帮助。 显然我在命令行中缺少--work-tree配置,所以我刚刚添加了:

在我的命令中

--work-tree=/var/www/html/并且它有效。

真的可以说我真的明白它的作用,因为我从来没有在我的存储库的工作树中改变任何东西 - 但至少它是有效的。

这是我的最终剧本:

#!/bin/sh


branch="production_test";

git --git-dir=/var/www/html/.git --work-tree=/var/www/html/ checkout -b $branch   
git --git-dir=/var/www/html/.git --work-tree=/var/www/html/ pull https://username:password@bitbucket.org/my/path/to/repository.git $branch