Git无法更新干净的工作目录

时间:2014-04-25 03:25:28

标签: git github chmod git-pull

我在我的机器上安装了Git,它一直在做一些奇怪的事情。

从头开始。

[nighthawk]$ cd ~
[nighthawk]$ rm -rf ./www
[nighthawk]$ ls
Maildir  logs
[nighthawk]$ 

现在我将克隆存储库。

[nighthawk]$ git clone https://key:@github.com/user/repo.git ./www
Cloning into ./www...
remote: Counting objects: 260, done.
remote: Compressing objects: 100% (195/195), done.
remote: Total 260 (delta 82), reused 217 (delta 47)
Receiving objects: 100% (260/260), 7.41 MiB | 4.88 MiB/s, done.
Resolving deltas: 100% (82/82), done.
[nighthawk]$ cd www
[nighthawk]$ git status
# On branch master
nothing to commit (working directory clean)
[nighthawk]$ 

现在我可以看到它。 就在那里。

我将对README文件进行更改,然后将这些更改提取到此计算机上。

这很奇怪:

[nighthawk]$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   README.md
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   public/README.md
no changes added to commit (use "git add" and/or "git commit -a")
[nighthawk]$ 

似乎 .git文件夹已更新,但已检出的目录目录不是。另外:存储库中不存在文件public / README.md文件。它存在于〜/ www(存储库的根目录)中。

我已经尝试了一切我能想到的设置文件权限,但我仍然感到困惑。我怎样才能让Git更新我的结账?

提前致谢!

PS:这台机器的git版本是1.7.2.5。

更新

这是我编辑存储库根目录中README.md文件的方式:

修改:

On a separate computer:
Squid:repo Jonn$ vim README.md
Squid:repo Jonn$ git add -A
Squid:repo Jonn$ git commit -m "Edited README again."
[master e2a4d36] Edited README again.
 1 file changed, 1 insertion(+), 1 deletion(-)
Squid:repo Jonn$ git push origin
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 386 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/user/repo.git
   882a196..e2a4d36  master -> master
Squid:repo Jonn$ 

然后通过webhook到www/public/deploy.php页面调用以下命令:

echo shell_exec('git --git-dir=/home/jonn/www/.git pull origin');

输出:

Updating 882a196..e2a4d36
Fast-forward
 README.md |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

1 个答案:

答案 0 :(得分:1)

  

似乎.git文件夹已更新,但已检出的目录目录不是。
  另外:存储库中不存在文件public/README.md文件。它存在于the ~/www(存储库的根目录)中。

考虑到你克隆该回购的位置(在~/www中),你的状态显示为public / README.md似乎是正常的&#34;未跟踪&#34;。

保持git repo内容一致性的一种简单方法是在.gitignore中编辑(或添加)~/www并添加:

/public/

完全忽略public文件夹。

OP Jonn添加:

  

由于某些原因,我对/README.md所做的更改被拉入子目录/public/README.md(之前没有存在)。

我建议使用--work-tree参数,以确保通过git pull更新的工作树位置:

echo shell_exec('git --git-dir=/home/jonn/www/.git --work-tree=/home/jonn/www pull origin');

使用recent version of Git (1.8.5),可以指定为:

echo shell_exec('git -C /home/jonn/www pull origin');