Cosa git remote -v show
restituisce quando si parla di origine?
Se origin punta a GitHub, lo stato dovrebbe essere aggiornato e non prima di qualsiasi repository remoto. Almeno, con Git1.6.5 che sto usando per un rapido test.
Comunque, per evitare questo, definire esplicitamente il repository remoto del ramo master:
$ git config branch.master.remote yourGitHubRepo.git
quindi a git pull origin master
, seguito da a git status
dovrebbe restituire uno stato pulito (no avanti).
Perché? perché il master get fetch origin (incluso nel master git pull origin) non si aggiorna FETCH_HEAD
(come spiega Charles Bailey nella sua risposta ), ma aggiorna anche il "ramo master remoto" all'interno del repository Git locale.
In tal caso, il master locale non sembrerebbe più "avanti" rispetto al master remoto.
Posso testarlo, con un git1.6.5:
Per prima cosa creo un workrepo:
PS D:\git\tests> cd pullahead
PS D:\git\tests\pullahead> git init workrepo
Initialized empty Git repository in D:/git/tests/pullahead/workrepo/.git/
PS D:\git\tests\pullahead> cd workrepo
PS D:\git\tests\pullahead\workrepo> echo firstContent > afile.txt
PS D:\git\tests\pullahead\workrepo> git add -A
PS D:\git\tests\pullahead\workrepo> git commit -m "first commit"
Simulo un repository GitHub creando un repo nudo (uno che può ricevere push da qualsiasi luogo)
PS D:\git\tests\pullahead\workrepo> cd ..
PS D:\git\tests\pullahead> git clone --bare workrepo github
Aggiungo una modifica al mio repository funzionante, che inserisco nel repository github (aggiunto come telecomando)
PS D:\git\tests\pullahead> cd workrepo
PS D:\git\tests\pullahead\workrepo> echo aModif >> afile.txt
PS D:\git\tests\pullahead\workrepo> git ci -a -m "a modif to send to github"
PS D:\git\tests\pullahead\workrepo> git remote add github d:/git/tests/pullahead/github
PS D:\git\tests\pullahead\workrepo> git push github
Creo un home repo, clonato da GitHub, in cui apporto un paio di modifiche, push su GitHub:
PS D:\git\tests\pullahead\workrepo> cd ..
PS D:\git\tests\pullahead> git clone github homerepo
PS D:\git\tests\pullahead> cd homerepo
PS D:\git\tests\pullahead\homerepo> type afile.txt
firstContent
aModif
PS D:\git\tests\pullahead\homerepo> echo aHomeModif1 >> afile.txt
PS D:\git\tests\pullahead\homerepo> git ci -a -m "a first home modif"
PS D:\git\tests\pullahead\homerepo> echo aHomeModif2 >> afile.txt
PS D:\git\tests\pullahead\homerepo> git ci -a -m "a second home modif"
PS D:\git\tests\pullahead\homerepo> git push github
Poi clono workrepo per un primo esperimento
PS D:\git\tests\pullahead\workrepo4> cd ..
PS D:\git\tests\pullahead> git clone workrepo workrepo2
Initialized empty Git repository in D:/git/tests/pullahead/workrepo2/.git/
PS D:\git\tests\pullahead> cd workrepo2
PS D:\git\tests\pullahead\workrepo2> git remote add github d:/git/tests/pullahead/github
PS D:\git\tests\pullahead\workrepo2> git pull github master
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From d:/git/tests/pullahead/github
* branch master -> FETCH_HEAD
Updating c2763f2..75ad279
Fast forward
afile.txt | Bin 46 -> 98 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
In quel repo, git status menziona master geing prima di ' origin
':
PS D:\git\tests\pullahead\workrepo5> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)
Ma questo è solo origin
non è GitHub:
PS D:\git\tests\pullahead\workrepo2> git remote -v show
github d:/git/tests/pullahead/github (fetch)
github d:/git/tests/pullahead/github (push)
origin D:/git/tests/pullahead/workrepo (fetch)
origin D:/git/tests/pullahead/workrepo (push)
Ma se ripeto la sequenza in un repository che ha un'origine su github (o nessuna origine, solo un remoto 'github' definito), lo stato è pulito:
PS D:\git\tests\pullahead\workrepo2> cd ..
PS D:\git\tests\pullahead> git clone workrepo workrepo4
PS D:\git\tests\pullahead> cd workrepo4
PS D:\git\tests\pullahead\workrepo4> git remote rm origin
PS D:\git\tests\pullahead\workrepo4> git remote add github d:/git/tests/pullahead/github
PS D:\git\tests\pullahead\workrepo4> git pull github master
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From d:/git/tests/pullahead/github
* branch master -> FETCH_HEAD
Updating c2763f2..75ad279
Fast forward
afile.txt | Bin 46 -> 98 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
PS D:\git\tests\pullahead\workrepo4> git status
# On branch master
nothing to commit (working directory clean)
Se avessi origin
puntato solo su github
, status
sarebbe pulito per git1.6.5.
Potrebbe essere con un avviso "avanti" per git precedenti, ma comunque, un git config branch.master.remote yourGitHubRepo.git
definito esplicitamente dovrebbe essere in grado di occuparsene, anche con le prime versioni di Git.
git push
sarà anche sembrare di risolverlo (reporting "tutti aggiornati").