working verificar simbolicos simbolico listar enlaces enlace eliminar crear clean carpeta git bitbucket symlink

git - verificar - on branch master nothing to commit, working tree clean



Git: no se puede crear enlace simbólico(Nombre de archivo demasiado largo) (4)

Aquí hay una solución que no requiere que regrese y arregle las confirmaciones. Después de todo, puede que no sea factible si el repositorio es remoto o compartido. Utiliza core.symlinks = false. Usted dijo que intentó esto, pero no dijo cuándo. Debe hacerlo antes de un proceso de pago, lo que hace un clon normal de forma predeterminada. Así que debes clonar con la opción --no-checkout.

git clone --no-checkout the-repo tmp-clone-dir cd tmp-clone-dir git config core.symlinks false git checkout cp the-problem-file the-problem-file.bak # make a backup git rm the-problem-file git commit -m ''Removed problem file pretending to be a symlink'' the-problem-file mv the-problem-file.bak the-problem-file # restore the backup; now it will be of type file git commit -m ''Added back the problem file - now with the correct type'' the-problem-file git push origin master cd .. /rm -rf tmp-clone-dir # IMPORTANT

El último paso es importante porque no desea hacer más trabajo en un repositorio con core.symlinks = false. Es sólo pedir problemas.

Lo anterior supone que desea que el archivo sea un archivo, no un enlace simbólico. Si estaba destinado a ser un enlace simbólico, entonces se detendría después de la primera confirmación, elimine el tmp-clone-dir y vuelva a su pago normal de repo para hacer el enlace simbólico y confirmarlo.

El beneficio de este método es que no se rompen los clones y ramas relacionados, ya que conserva el historial. La desventaja de esto es que el compromiso roto todavía está allí y causará problemas a cualquiera si intenta usar ese compromiso malo en particular.

Había empujado un proyecto desde Linux a bitbucked y luego lo había clonado en Windows. Resulta que había dos enlaces simbólicos, que aparecían como archivos de texto en las ventanas. Como sabía dónde debían apuntar, los reemplacé con copias de sus archivos de destino, los confirmé y los envié.

Ahora el repositorio de butbucket se ve bien cuando lo veo desde su interfaz web. Sin embargo, un clon de git en mi máquina de Unix me da dos mensajes como:

error: unable to create symlink ... (File name too long)

y los dos archivos, que eran enlaces simbólicos previamente están ausentes. Intenté la clonación en / tmp / ... para obtener nombres de archivo más cortos, pero obtuve los mismos resultados. Eso sugiere, que algo salió mal con el repositorio de bitbucket. core.symlinks dentro y fuera.

Puedo vivir sin los enlaces simbólicos, pero me gustaría tener un repositorio de trabajo. ¿Alguien sabe una manera (aparte de recrear el repositorio)?


También hay una forma más fácil si está utilizando bitbucket. Como ahora bitbucket admite la eliminación en línea de los archivos, puede ir a su repositorio en bitbucket, busque el archivo que sea problemático, presione el botón desplegable cerca del botón "Editar" y "Eliminar".

Eso eliminará el archivo con el enlace simbólico roto y tendrá un directorio de trabajo nuevamente. Si esto es posible, es mucho más rápido que rebasar y eliminar manualmente.


Tan pronto como cambió el contenido de un archivo de enlace simbólico falso sin cambiar también su modo de enlace simbólico a archivo normal y confirmó el resultado, creó un blob que no se puede extraer en un sistema operativo con enlaces simbólicos reales, porque tiene un objeto que se supone que es un enlace simbólico, pero su contenido es demasiado largo para ser una ruta de acceso. La interfaz web no le está haciendo ningún favor ocultando este problema.

Es probable que tenga que hacer una copia de seguridad de ese compromiso, arreglarlo y volver a realizar todo lo que se encuentre después. git rebase -i ayudará, pero puede que no sea fácil, especialmente si ha realizado más cambios en los archivos mientras estaban en este estado de enlace simbólico falso, pero en realidad no es un enlace simbólico.

Suponiendo que la confirmación incorrecta es abcdef123 , debe hacer esto:

git rebase -i ''abcdef123^''

Lo que te pondrá en un editor con una lista de confirmaciones. abcdef123 debe estar en la primera línea. En esa línea, cambiar pick para edit . Si hay más de una confirmación incorrecta, cámbielas todas a edit . Guarde y salga del editor.

Ahora volverá al punto en el que cometió el archivo incorrecto. Esta es tu oportunidad de alterar la historia, corrigiendo las cosas que una vez fueron mal Inspeccionar el compromiso con

git show

y deshaga la parte mala restaurando la ruta de acceso del enlace simbólico original en el archivo y git add . O realmente podría deshacerse del enlace simbólico correctamente con git rm , luego crear un nuevo archivo y git add . Si elige la primera opción, tenga en cuenta que el contenido de un enlace simbólico es solo una ruta de acceso. No es un archivo de texto, no tiene una nueva línea al final. Si lo edita con un editor de texto que agrega una nueva línea, tendrá un enlace simbólico roto (que apunta a un archivo con una nueva línea en su nombre).

Después de que hayas hecho tu git add , vuelve a insertar el compromiso fijo en su lugar en el historial:

git commit --amend git rebase --continue

Si cambió varias confirmaciones de pick a edit , tendrá que repetir ese procedimiento para cada una. El final de git rebase --continue te devolverá al presente.

Si se encuentra en un compromiso anterior durante el rebase y descubre que todo el commit es malo (no hizo nada más que reemplazar un enlace simbólico con el contenido no modificado del archivo al que apunta), entonces puede git rebase --skip lugar de Modificando y continuando. Si sabe de antemano que esto va a suceder, simplemente puede eliminar la confirmación incorrecta de la lista de git rebase -i lugar de cambiar su pick a edit .

Si tiene varias sucursales afectadas por los comités incorrectos, tendrá que repetir todo el procedimiento para cada sucursal. Revise una sucursal, ejecute git rebase -i hasta su finalización (que es cuando git rebase --continue dice "Se ha rebasado exitosamente"), luego revise la siguiente sucursal y vuelva a hacerlo.

En el futuro, al dividir su trabajo de desarrollo entre Windows y un sistema operativo real, haga su trabajo de Windows con cygwin. Dentro de cygwin, los enlaces simbólicos son enlaces simbólicos y no puedes desordenarlos como hiciste.


Tuve este problema, esto me lo resolvió:

git config core.symlinks false git rm <problem-file> git commit <problem-file> git push git config core.symlinks true