repositorio que oneline log crear comandos git

que - Error de extracción de Git: no se puede crear el nombre de archivo sha1 temporal



git push (19)

Cambiar el grupo de usuarios + permiso funcionó para mí. Me di cuenta de que las confirmaciones de algunos usuarios estaban en otro grupo. Cambiar todo al mismo grupo solucionó este problema.

Tengo una pequeña configuración de git repo con el único propósito real de poder desarrollar localmente en varias máquinas (trabajo, hogar, computadora portátil). Por lo tanto, tengo una rama y me comprometo / empujo una vez que salgo de una computadora, tire una vez que me siento en la siguiente. Ha funcionado bien, hasta ahora eso es todo. Ahora cuando pruebo mi máquina de "prueba en vivo", obtengo lo siguiente:

remote: Counting objects: 38, done. remote: Compressiremote: ng objects: 100% (20/20), done. remote: Total 20 (delta 17), reused 0 (delta 0) error: unable to create temporary sha1 filename .git/objects/ed: File exists fatal: failed to write object fatal: unpack-objects failed

Buscando en la red la única respuesta real que pude encontrar fue la siguiente: http://marc.info/?l=git&m=122720741928774&w=2 que básicamente dice que este es un error falso que está en la parte superior de la pila y por lo tanto no dice nada sobre lo que realmente está mal.

¿A dónde voy desde aquí para descubrir qué está mal?

Editar: eliminó la copia local y volvió a clonarse


Debe tenerse en cuenta que debe corregir los permisos en el repositorio al que está presionando, no solo el que está trabajando.


En mi caso, tuve este problema al intentar presionar.

dieter@dieter-dellD620-arch sugarcrmclient [master] git push origin Counting objects: 16, done. Delta compression using up to 2 threads. Compressing objects: 100% (10/10), done. Writing objects: 100% (12/12), 3.91 KiB, done. Total 12 (delta 1), reused 11 (delta 1) error: unable to create temporary sha1 filename ./objects/7a: File exists fatal: failed to write object error: unpack failed: unpacker exited with error code To [email protected]:sugarcrmclient.git ! [remote rejected] master -> master (n/a (unpacker error)) ! [remote rejected] web -> web (n/a (unpacker error)) error: failed to push some refs to ''[email protected]:sugarcrmclient.git''

no fue un problema de permiso. git gc, git gc --agrressive, git repack o git prune localmente no ayudaron. Observe cómo el error dice "error de desempaquetado", creo que es la clave, porque implica que está en el otro lado. Así que fui al repositorio (desnudo) e hice un git gc allí. Entonces podría empujar bien.


Encontré este problema cuando uso git push

Luego ejecuto git gc , funciona.

De git-gc (1) Página manual:

git-gc: limpie los archivos innecesarios y optimice el repositorio local


Estoy teniendo este problema y siento que he probado todas las cosas anteriores. Lo había visto antes y era debido a los permisos entre diferentes usuarios que empujaban al repositorio, pero en este caso todos presionan al mismo usuario, y en buena medida, he (en el repositorio) lo he probado todo para el usuario correcto. y agrupe y modifique u + w y g + w para una buena medida. Todavía recibo un error: unable to create temporary sha1 filename ./objects/9a .

Acabo de investigar un poco más y parece que está pasando algo con los permisos: antes del empuje, en el repositorio (que es un repositorio simple alojado en un servidor), todos los archivos en los objetos tienen permisos de -rw-rw-r-- set, que es lo que esperarías. Todos son propiedad del mismo usuario y grupo. Después de la inserción fallida, puedo grep para archivos con los permisos establecidos en -r--r--r-- , es decir, no se puede escribir por nadie, y mostrar sus ubicaciones con el comando bash find . -perm 444 | xargs ls -l find . -perm 444 | xargs ls -l find . -perm 444 | xargs ls -l . Hacer eso me da lo siguiente:

-r--r--r-- 1 ourusername ourgroupname 730 Nov 4 15:02 ./objects/46/346f550340bc0d3fec24ea42b25999161f8c7a -r--r--r-- 1 ourusername ourgroupname 177 Nov 4 15:02 ./objects/4c/664ebbfad568de6101a52c01f5117654945d6d -r--r--r-- 1 ourusername ourgroupname 730 Nov 4 14:36 ./objects/9e/3f572366da9fb319331dfd924ae35cf9fd00ae -r--r--r-- 1 ourusername ourgroupname 175 Nov 4 14:36 ./objects/aa/f42d7ed706f1d2e4a0aa1c5eb184e17e917204

Estos son todos los archivos recientemente cambiados (en el momento de la publicación es el 4 de noviembre, 15:08). Entonces, parece que git está actualizando / reemplazando los archivos (dándoles una nueva marca de tiempo), cambiando los permisos en el proceso y luego quejándose de los permisos. Estoy totalmente perplejo en cuanto a lo que está pasando aquí :(


He visto este error cuando varios usuarios se comprometen con el mismo repositorio, lo que da como resultado problemas de permisos de escritura grupal como consecuencia de ssh y umask

Puede hacer que los archivos nuevos conserven el modo g + w estableciendo sharedrepository=true en la sección [core] de config:

cd /my/shared/repo.git git repo-config core.sharedRepository true # (might also need to "chmod -R g+wX ." for each # user that owns files in .git/objects)

EDITAR:

Este método solo se aplica a los repos existentes. Puede hacerlo bien una vez en la creación del repositorio: git --bare init --shared .


He visto este error una vez y lo he rastreado a un problema de permisos. No pude encontrar cómo se había causado, pero de alguna manera git se había ejecutado como un grupo que no tenía permiso de escritura para algún directorio de objetos.

No vi ninguna razón obvia para ello en el código y formulé la hipótesis de que era un problema de permisos de OS X, presumiblemente debido a una instalación o instalación descuidada.


Intenté algunas de las soluciones, pero finalmente me di cuenta de que el disco de nuestro servidor git no tenía espacio libre.


Mi problema fue un problema de permiso

Subí directorio entonces cp -R repo repo_copy

entonces todo funcionó de nuevo.

Luego fui a eliminar repos y permiso denegado, revisé las permanentes y había cambiado la cantidad de permanentes permitidos que el usuario que estaba ejecutando no tenía acceso de escritura ...


Obtengo errores como este cuando trabajo sobre sshfs. Se repara luego de desmontarlo y luego volver a montarlo.


Personalmente, tengo este problema cuando hice un master de origen de git push. La solución para mí fue: en mi servidor, inicio sesión con root en el directorio que contiene mi repositorio y lo hago de forma recursiva:

chown -hR MyGitUser MyRepo

y todo funciona bien

Solo tengo un usuario de git y otros se conectan con ssh publicando su clave pública. Si configura varios usuarios de git, debe hacer lo mismo para cada usuario.


Por lo que vale, cuando tuve este problema, pero al comprometerme, probé git-repack y git-gc , pero ninguno funcionó. Obtuve un error de permiso denegado, lo que me llevó a chown todo el repositorio de forma recursiva para el usuario que esperaba, y luego pude confirmar / empujar / tirar sin ningún problema.


Se menciona en " Re: Bug? Git svn fetch:" no se puede crear el nombre de archivo temporal sha1 /home/andres/git/public/crystal.g ":

Después de repacking el repositorio, el problema se ha ido. Realmente bastante extraño.

¿Has probado un nuevo empaque?

git-repack se usa para combinar todos los objetos que no residen actualmente en un "paquete", en un paquete. También se puede usar para reorganizar paquetes existentes en un único paquete más eficiente.
Un paquete es una colección de objetos, comprimidos individualmente, con compresión delta aplicada, almacenada en un solo archivo, con un archivo de índice asociado.
Los paquetes se utilizan para reducir la carga en los sistemas espejo, motores de copia de seguridad, almacenamiento en disco, etc.

¿Y trataste de actualizar a la última versión de Git?

Tienes diferentes comandos para ejecutar para "limpiar" tu repositorio, desde el más seguro hasta el más agresivo:

$ git-prune $ git-gc --aggressive $ git-repack $ git-repack -a $ git-prune-packed

Como se mencionó en " La recolección de basura Git no parece funcionar completamente ", un git gc --aggressive no es suficiente ni suficiente por sí solo.

La combinación más efectiva sería agregar git repack , pero también git prune :

git gc git repack -Ad # kills in-pack garbage git prune # kills loose garbage


Si alguien más obtiene este error, lo he encontrado al trabajar en la división windows-linux. Parece que si los formatos de nueva línea se convierten a Windows, aún así puede comprometerse en algunas circunstancias, pero git luego se convierte a formato de Linux.

Entonces, si las nuevas líneas fueran el único cambio, entonces ahora teníamos dos compromisos idénticos seguidos. Como los hash de confirmación se generan a partir de datos de archivo de confirmación y cada uno tenía la misma información, terminaron con el mismo hash. Al menos en mi caso, eso es lo que indica el "Archivo existe". Git se confundió.

Lo arreglé haciendo el git reset --hard localmente y en el repositorio central.


Trabajando en el servidor de Linux para mac local - Probé algunas de las sugerencias anteriores sin suerte. Reiniciado y luego funcionó.

No es realmente una solución adecuada, pero creo que podría ayudar a alguien por ahí.



Tuve este problema recientemente e intenté todo en este hilo sin suerte. Había mucho espacio en el disco en mi VPS pero resultó que debido a que no había limpiado la carpeta de implementaciones, había excedido el límite de inodos (probablemente debido a las libs de JS que incluía cientos de archivos antes de procesarlos).

Eliminé una carga de implementaciones antiguas y todo funcionó bien.

Me doy cuenta de que esto es un caso marginal, pero es algo a tener en cuenta si todo lo demás falla.


Tuve un error similar, y no fue un problema de permisos (soy el único usuario del repositorio), y ninguna de las técnicas de gc / reempaquetado funcionó. En última instancia, simplemente dejé de lado el antiguo repositorio remoto y empujé uno nuevo. Afortunadamente, era bastante pequeño.

Liam


Tuvimos el mismo problema en el que el usuario 1 se había comprometido previamente, después de lo cual el directorio objects / ed se creó y es propiedad del usuario 1. Debido a que los permisos predeterminados del usuario 1 no permitían escribir por el usuario 2, el usuario 2 no pudo confirmar.

git crea estos directorios como depósitos de hash de algún tipo a pedido, por lo que es muy posible que sean propiedad de varias personas con diferentes permisos según su umask.

Lo resolvimos agrupando primero todos los directorios para ser propiedad del mismo grupo, luego modificándolos con g + w para que fueran escribibles por grupo, y finalmente configurando umask de todos correctamente para que todos los segmentos recién creados también puedan escribirse en grupo.

Esto se debe a que estamos usando ssh: // URLs para salir de git - Supongo que si estuviéramos usando el protocolo de red git no sucedería porque el daemon git tendría una propiedad consistente del archivo.