Come evitare che git richieda sudo su ogni comando git


11

Ho creato una directory /var/wwwin cui archiviare il clone delle mie app Web. Quando inizialmente ho clonato l'app da GitHub mi ha richiesto di usare sudo e ogni volta che lo faccio git pullrichiede sudo. Sto incontrando alcuni problemi a causa di questo. Ad esempio, i miei tasti SSH non corrispondono. Quindi, quando faccio la mia git pull, devo usare HTTPS invece di ssh e inserire manualmente il mio nome utente e la mia password ogni volta che voglio estrarre e aggiornare la mia app. Come faccio a configurarlo in modo da non dover usare sudo ogni volta che utilizzo git?

Risposte:


13

Qui stanno succedendo un paio di cose:

  • Quando si sudo git checkout ..., tutti quei file sono di proprietà dell'utente root e del gruppo root. Con le autorizzazioni standard, ecco perché le successive modifiche a questi file richiedono di essere root.

  • /var/www/per impostazione predefinita è di proprietà del www-datagruppo. Qualcosa che il tuo utente non è di default.

Il modo più semplice per scrivere /var/www/è semplicemente aggiungere il tuo utente al gruppo www-data . Ovviamente puoi cambiare la directory in modo che sia di proprietà del tuo utente, ma questo può avere degli orribili effetti a catena se non li prevedi.

Dovrai accedere nuovamente dopo aver aggiunto il tuo utente al gruppo www-data.

Nel tuo caso in particolare, dovrai correggere il tuo attuale casino di dati di proprietà di root. Puoi eliminarlo come root (e ricontrollare) ma se hai un lavoro non salvato, sarà più semplice riportare tutto al tuo utente. Il seguente esempio è estremamente pigro e presuppone che ciò di cui stiamo parlando sia l'unica cosa in / var / www /:

sudo chown -R www-data: /var/www/

Ok, sarebbe meglio semplicemente sudo git checkoutin un'altra directory e quindi distribuire la mia app nella directory / var / www? Ho appena letto da qualche parte che in genere non è una buona idea fare il checkout dei progetti nella directory var per cominciare. Una persona ha raccomandato di controllare i progetti nella home directory
Scott,

2
Sarebbe meglio se smettessi di eseguire git come root. Punta a quello. Qualsiasi piano che ti lascia in esecuzione come root è già fallito. Quello che stai dicendo su di check-out in un webdirectory è corretta - che dà accesso alle persone di vostra .gitdirectory può dare loro accesso a cose che non vuoi lasciare che la gente l'accesso, ma è possibile impedire l'accesso alla .git/directory che mitiga l'intera questione.
Oli

Ci sono anche altre strutture di directory accettabili in cui hai una directory di mantenimento per il tuo sito Web in cui vanno le cose non ospitate (incluso il tuo .git) e al suo interno c'è una directory pubblica / che dici ad Apache di ospitare. L'etica di mantenere un sito web in / var / www / è molto arcaica.
Oli

Hai una struttura di directory consigliata? Fondamentalmente, ho il mio checkout e quindi devo raggrupparlo in un .tgz. E poi devo decomprimerlo in un'applicazione nodo. A proposito, è un'applicazione meteorica. Sono un po 'confuso su dove conservare queste tre cartelle / file separati
Scott,

@Scott Ho riscontrato questo stesso problema. I successivi sottocomandi nel repository (nel mio caso) chiameranno git e proveranno a clonare altri repository. La soluzione, per riallineare le chiavi SSH come hai detto, era avviare il processo senza usare sudo. Molte di queste domande e discussioni sono una soluzione che probabilmente ti farà colpire i muri lungo la strada.
Jordan Stefanelli,

0

Cambia il proprietario della cartella? Ho spostato la mia cartella www in / home / nome utente, puoi cambiarne la posizione in / etc / apache2 / sites-enabled / 000-default


Quindi ha a che fare con la directory in cui sto memorizzando il mio clone?
Scott,

Si, esattamente. Di default /var/wwwnon può essere scritto.
Joyfulgrind,

0

Sono in ritardo con questa risposta, ma ho scoperto che per evitare di inserire la password ogni volta che ho dovuto cambiare il repository da https a ssh.

Dalla sezione di aiuto di Github.com:

Il comando git remote set-url modifica un URL di repository remoto esistente.

Terminale aperto.

Cambia la directory di lavoro corrente nel tuo progetto locale.

Elenca i telecomandi esistenti per ottenere il nome del telecomando che desideri modificare.

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

Cambia l'URL del tuo telecomando da HTTPS a SSH con il comando git remote set-url.

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

Verifica che l'URL remoto sia stato modificato.

git remote -v

# Verifica nuovo URL remoto

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.