Git no puede actualizar el directory de trabajo limpio

Tengo la configuration de Git en mi máquina, y ha estado haciendo algo extraño.

Comenzaré desde cero.

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

Ahora voy a clonar el repository.

 [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]$ 

Ahora puedo verlo. Está allá.

Voy a hacer un cambio en el file README, y luego llevar esos cambios a esta máquina.

Esto es muy extraño:

 [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]$ 

Parece que la carpeta .git está actualizada, pero el directory del directory protegido no lo está . Además, el file público / README.md no existe en el repository . Existe en ~ / www (la raíz del repository).

Intenté todo lo que se me ocurrió para configurar los permissions de files, pero aún estoy desconcertado. ¿Cómo puedo hacer para que Git actualice mi pago?

¡Gracias por adelantado!

PD: La versión git de esta máquina es 1.7.2.5.

Actualizar:

Así es como README.md file README.md en la raíz del repository:

Modificando:

 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$ 

Tracción:

Luego, un webhook a la página www/public/deploy.php llamado el siguiente command:

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

Salida:

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

Parece que la carpeta .git está actualizada, pero el directory del directory protegido no lo está.
Además, el file public/README.md no existe en el repository. Existe en the ~/www (la raíz del repository).

Teniendo en count dónde clonas ese repository (en ~/www ), parece normal que tu estado muestre public / README.md como "no rastreado".

Una manera simple de mantener la coinheritance en su contenido de git repo sería editar (o agregar) su .gitignore en ~/www y agregar:

 /public/ 

Para ignorar por completo la carpeta public .

El OP Jonn agrega:

Por algún motivo, los cambios que realicé en /README.md se llevaron al subdirectory /public/README.md (que no existía antes).

Aconsejo usar el parámetro --work-tree para estar seguro de la location del tree de trabajo actualizada mediante un git pull:

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

Con la versión más reciente de Git (1.8.5) , eso podría especificarse como:

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