2010-02-08 20 views
7

Quando clono un archivio Mercurial di solito mostra i file come modificati quando non lo sono. Questo può accadere quando faccio i seguenti passi;Mercurial mostra i file come modificati in modo errato

$ hg clone <url> 
$ cd project 
$ hg st 
.... large number of files with M at the start for modified 
$ hg diff 
.... no result. 

Penso che questo sia perché i file hanno avuto i loro permessi modificati nel processo in modo sembra che i file sono diversi in quanto hg in realtà non fare un diff su ogni file quando hg st viene utilizzata. So che questo può accadere anche in git.

se faccio un hg commit allora il problema scompare ma vuol dire che devo fare un commit vuoto e che non è particolarmente bello.

Ho provato a fare varie cose come hg st --all per ottenere più informazioni e mostra solo che alcuni file sono modificati - non tutti. Non riesco a vedere uno schema.

Quando sto facendo il mio clone hg è successo sul mio disco di rete che ho usato perché è stato eseguito il backup - non sono sicuro se questo potrebbe essere ciò che causa il permesso di modificare i file? Attualmente sto usando Ubunut 9.04.

c'è un modo che posso ottenere hg st per correggersi in qualche modo?

Il progetto in questione (anche se è successo con altri) è http://bitbucket.org/d0ugal/django-bursar/overview/ mentre sto cercando di fare qualche lavoro su di esso.

+0

Ho anche questo problema, è molto fastidioso e mi fa sentire come se Mercurial fosse inaffidabile. – Webnet

risposta

0

Come si è scoperto facendo:

$ hg diff --git 

... dimostra che i permessi dei file erano davvero cambiato da 644 a 755.

non mi piace particolarmente la soluzione, ma sono stato in grado di risolverlo eseguendo questo (sul server che ospita il codice, non sul mio computer locale).

find . -type f -print | xargs chmod 644 

Quindi due file hanno mostrato che erano stati modificati da 755 a 644 (quindi li ho aggiornati singolarmente). Fortunatamente in questo caso è stato abbastanza facile, ma un progetto con permessi di file più diversi potrebbe essere un problema.

Penso che il problema potrebbe riguardare il modo in cui il mio server condivide l'unità. Dovrò esaminarlo in un altro punto, ma questo è utile per l'interim. Deve avere qualcosa a che fare con il modo in cui i file vengono salvati sulla macchina remota? Penso che la prossima volta proverò a fare il clone git sul server stesso e sul lavoro sul progetto localmente.

Come nota a margine, c'è un punto su questo comportamento nelle FAQ di git. http://git.wiki.kernel.org/index.php/GitFaq#Why_does_git_diff_sometimes_list_a_file_that_has_no_changes.3F - Non sono riuscito a trovare nulla per mercurial però.

+0

In un altro progetto ho clonato il repository sul mio server, dove è ospitato il codice, e ha eseguito il check out corretto con le autorizzazioni corrette. Sembra che tra il check-out e la copia su un'unità di rete siano state modificate le autorizzazioni. –

+3

Non dovrebbe essere 'hg diff --git' piuttosto che' hg st --git'? –

+0

Sì, buon posto. –

5

Se sono le autorizzazioni che sono state modificate, è possibile visualizzare tali differenze utilizzando hg diff --git. Non sono sicuro del perché le autorizzazioni cambino al momento del checkout.

+0

Grazie - L'avevo appena scoperto grazie a qualche aiuto su IRC. Ho scritto una risposta a me stesso su come ho risolto il problema alla fine - non ideale ma posso tornare al lavoro ora! –

Problemi correlati