¿Cómo evito que git requiera sudo en cada comando git?

10

Creé un directorio /var/wwwpara almacenar mis aplicaciones web clonadas. Cuando cloné inicialmente la aplicación desde GitHub, me obligó a usar sudo y cada vez que hago una git pullrequiere sudo. Me encuentro con algunos problemas debido a esto. Por ejemplo, mis claves ssh no coinciden. Entonces, cuando hago mi git pull, tengo que usar HTTPS en lugar de ssh e ingresar manualmente mi nombre de usuario y contraseña cada vez que quiero extraer y actualizar mi aplicación. ¿Cómo configuro esto para no tener que usar sudo cada vez que uso git?

Scott
fuente

Respuestas:

12

Aquí hay un par de cosas:

  • Cuando usted sudo git checkout ..., todos esos archivos son propiedad del usuario raíz y del grupo raíz. Con los permisos estándar, es por eso que las modificaciones posteriores a esos archivos requieren que seas root.

  • /var/www/por defecto es propiedad del www-datagrupo. Algo que su usuario no es por defecto.

La forma más fácil de escribir /var/www/es simplemente agregar su usuario al grupo www-data . Por supuesto, puede cambiar el directorio para que sea propiedad de su usuario, pero esto puede tener algunos efectos desagradables si no los está evitando.

Deberá volver a iniciar sesión después de agregar su usuario al grupo www-data.

En su caso específicamente, necesitará arreglar su actual desorden de datos propiedad de root. Puede eliminarlo como root (y volver a finalizar la compra), pero si tiene trabajo no guardado, será más limpio devolver todo a su usuario. El siguiente ejemplo es extremadamente vago y supone que de lo que estamos hablando es de lo único en / var / www /:

sudo chown -R www-data: /var/www/
Oli
fuente
Ok, ¿sería mejor simplemente sudo git checkoutingresar a otro directorio y luego implementar mi aplicación en el directorio / var / www? Acabo de leer en alguna parte que, en general, no es una buena idea retirar proyectos en el directorio var para empezar. Una persona recomendó revisar proyectos en el directorio de inicio
Scott
2
Sería mejor si dejaras de ejecutar git como root. Apunta a eso. Cualquier plan que lo deje ejecutándolo como root ya ha fallado. Lo que está diciendo acerca de ingresar a un directorio web es correcto: dar acceso a las personas a su .gitdirectorio puede darles acceso a cosas a las que no desea que las personas accedan, pero puede evitar el acceso al .git/directorio que mitiga todo el problema.
Oli
También hay otras estructuras de directorio aceptables en las que tiene un directorio de retención para su sitio web donde van cosas no alojadas (incluido su .git) y dentro de eso hay un directorio público / que le dice a Apache que aloje. El espíritu de mantener un sitio web en / var / www / es muy arcaico.
Oli
¿Tiene una estructura de directorio recomendada? Básicamente, tengo mi pago y luego tengo que agruparlo en un .tgz. Y luego tengo que descomprimir eso en una aplicación de nodo. Es una aplicación de meteoritos por cierto. Estoy un poco confundido sobre dónde guardar estas tres carpetas / archivos separados
Scott
@ Scott, me encontré con este mismo problema. Los subcomandos posteriores en el repositorio (en mi caso) llamarán a git e intentarán clonar otros repositorios. La solución, para volver a alinear las claves SSH como usted dijo, fue iniciar el proceso sin usar sudo. Gran parte de estas preguntas y respuestas y discusión de hilos es una solución que probablemente hará que te golpees contra las paredes en el camino.
Jordan Stefanelli
0

Hm, ¿cambiar de dueño de carpeta? Moví mi carpeta www a / home / username, puede cambiar su ubicación en / etc / apache2 / sites-enabled / 000-default

michel
fuente
¿Entonces tiene que ver con el directorio en el que estoy almacenando mi clon?
Scott
Sí exactamente. Por defecto /var/wwwno se puede escribir.
Joyfulgrind
0

Llego un poco tarde con esta respuesta, pero descubrí que para evitar ingresar la contraseña cada vez que tenía que cambiar el repositorio de https a ssh.

De la sección de ayuda de Github.com:

El comando git remote set-url cambia una URL de repositorio remoto existente.

Terminal abierta

Cambie el directorio de trabajo actual a su proyecto local.

Enumere sus controles remotos existentes para obtener el nombre del control remoto que desea cambiar.

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

Cambie la URL de su control remoto de HTTPS a SSH con el comando git remote set-url.

git remote set-url origin [email protected]:USERNAME/REPOSITORY.git

Verifique que la URL remota haya cambiado.

git remote -v

# Verificar nueva URL remota

origin  [email protected]:USERNAME/REPOSITORY.git (fetch)
origin  [email protected]:USERNAME/REPOSITORY.git (push)
jonnyjandles
fuente