2012-03-24 19 views
17

Sto provando a git pull alcuni repository tramite utente root da qualsiasi directory.La estrazione di Git dipende dalla directory corrente

Per esempio, l'esecuzione di git pull da /root/:

#> cd ~ 
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull 
/usr/libexec/git-core/git-sh-setup: line 142: cd: /root/.: Permission denied 
Cannot chdir to /root/., the toplevel of the working tree 

e l'esecuzione di git pull da /:

#> cd/
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull 
Already up-to-date. 

Perchè directory corrente influisce git pull comando ing?

Come si può evitare quella ridondante cd?

+0

Dove si trova/root è una cartella all'interno del repository? Se è così non dovresti avere problemi di autorizzazione. Se/root è al di fuori della tua struttura git, la domanda che ti viene chiesta è perché acceda a quella cartella in primo luogo? – bluesman

+0

Perché stai cercando di lavorare come root? – Ethan

+0

Sto provando a lavorare con root perché è un contenuto di eix-sync.conf. –

risposta

16

Nel primo esempio, il comando git viene eseguito come utente dmalikov con la directory corrente /root. Poiché il comando git pull equivale a git fetch seguito da git merge e poiché git merge funziona sull'albero di lavoro, git prova a cercare la struttura di lavoro. Poiché questo utente non dispone dell'autorizzazione a cd /root, il comando git ha esito negativo.

Anche il tuo secondo esempio non funziona come ti aspetteresti. Se vengono apportate modifiche effettive (anziché "Già aggiornato"), lo git pull avrà esito negativo perché non riesce a trovare l'albero di lavoro.

Avete alcune semplici opzioni:

1) si può solo fare la parte del git fetch l'operazione eseguendo:

sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git fetch 

che non dà alcun errore per me.

2) È possibile aggiungere un cd all'albero di lavoro:

(cd /home/dmalikov/path/to/repo; sudo -u dmalikov git pull) 
+1

Correlato: git --git-dir non funziona come previsto: http://stackoverflow.com/questions/1386291/git-git-dir-not-working-as-expected – kenorb

0

Non penso sia possibile evitare quel cd mentre si gira git con un utente che non ha il permesso di cambiare la directory alla directory corrente, ovvero/root./come directory corrente funziona ovviamente poiché tutti hanno i permessi per passare a quella directory.

+0

'fatale: impossibile tornare a '/ root': autorizzazione negata' –

+0

Modificata la mia risposta. Ha a che fare con i permessi e non con l'albero del lavoro come pensavo inizialmente. – ralphtheninja

2

Per rispondere alla mia commento, la/root è verificato un errore interessante

per farlo lavorare con --git-dir è inoltre necessario specificare una directory dell'albero di lavoro

sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git --work-tree=/home/dmalikov/path/to/repo/.git pull 
+1

'fatale: impossibile tornare a '/ root ': Autorizzazione negata' –

+0

Quale macchina stai? Utilizzerà i percorsi specifici del tuo sistema (windows o linux). Il seguente funziona sul mio computer locale (git bash su windows) '$ git --git-dir =/c/workspace/changes/.git --work-tree =/c/workspace/changes/pull Già aggiornato. – bluesman

+0

Prova ad eseguire il comando da dir, dove non puoi 'cd' tramite utente non-root. –

Problemi correlati