我创建了一个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启动命令运行两次。但它没有解释这种行为。
答案 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