tag remove practices crear best git mercurial git-filter-branch git-rewrite-history
repositorio de prueba

remove - ¿Eliminando el directorio ''.git'' de git repo?



git rename tag (4)

¿Has probado con el siguiente comando?

git filter-branch --tree-filter ''rm -Rf .git'' HEAD

La documentación de git filter-branch indica que esto sería más lento que --index-filter , pero podría hacer el trabajo.

Estoy tratando de migrar un repositorio git de Kiln a Github. Puedo agregar el nuevo control remoto muy bien, pero cuando intento empujar el maestro al nuevo control remoto, aparece el siguiente error:

Counting objects: 8691, done. Delta compression using up to 8 threads. Compressing objects: 100% (3000/3000), done. remote: error: object a9ee490ac00987835de30bdbc851da5e8d45d28b:contains ''.git'' remote: fatal: Error in object error: pack-objects died of signal 13 error: failed to push some refs to ''[email protected]:Account/repo.git''

Commit a9ee490ac00987835de30bdbc851da5e8d45d28b tiene los siguientes archivos:

.git/ CHANGELOG.md JSONKit.h JSONKit.m README.md

Obviamente, alguien en el pasado, usando hg , verificó un repositorio git completo en un subdirectorio.

Me gustaría eliminar ese directorio por completo, pero tengo problemas para eliminar ese archivo del historial de git.

La respuesta al empujar un repositorio git falla con un error: contiene ''.git'' no ayuda, porque tengo el repositorio como un repositorio git, no uno mercurial.

git filter-branch --index-filter ''git rm -r --cached --ignore-unmatch .git'' , pero me git filter-branch --index-filter ''git rm -r --cached --ignore-unmatch .git'' el error:

Rewrite 7dbd0970d6c79215d11994b4a9b8091b2e954cfb (326/442)error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/HEAD'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/config'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/description'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/applypatch-msg.sample'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/commit-msg.sample'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/post-update.sample'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/pre-applypatch.sample'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/pre-commit.sample'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/pre-rebase.sample'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/prepare-commit-msg.sample'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/update.sample'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/index'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/info/exclude'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/logs/HEAD'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/logs/refs/heads/master'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/objects/pack/pack-43fac03d375df5c1e380c5e522ba6bcb9b4e1ec1.idx'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/objects/pack/pack-43fac03d375df5c1e380c5e522ba6bcb9b4e1ec1.pack'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/packed-refs'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/refs/heads/master'' error: Invalid path ''Account/Libraries/ShareKit/Submodules/JSONKit/.git/refs/remotes/origin/HEAD''

y la historia no parece haber cambiado. Estoy en el límite de mi conocimiento git. ¿Alguien puede ayudar?


Otra forma de manejar el caso en el que un repositorio Mercurial (Hg) tiene una carpeta .git incorporada es primero "arreglar" el repositorio Hg antes de exportarlo a Git. @ Laurens-Holst tiene una gran manera de hacer esto .

Si la carpeta .git estaba en la raíz de su proyecto, cree un archivo de texto, my-filemap que se parece a:

exclude ".git"

Habilite la extensión Convert en su archivo .hgrc:

[extensions] convert =

Luego filtre la carpeta .git usando la extensión de conversión Hg:

hg convert --filemap my-filemap originalrepo newrepo

Ahora puede exportar desde newrepo y no tendrá el problema de la carpeta .git incrustada.

También puede usar git fsck para asegurarse de que el nuevo repositorio de Git esté bien antes de empujarlo.


Según tengo entendido, el horno te permitirá clonar un repositorio como git o Mercurial en estos días, así que clónalo como mercurial, usa la solución de mapa de sitio mercurial que ya encontraste en ese repo de Mercurial como un nuevo repositorio para Kiln y luego clícalo como git . Luego tendrás un repositorio de git que puedes empujar a github.


Use BFG Repo-Cleaner , una alternativa más simple y rápida a git-filter-branch diseñada específicamente para eliminar archivos del historial de Git.

Siga cuidadosamente los pasos aquí: https://rtyley.github.io/bfg-repo-cleaner/#usage - pero el bit del núcleo es simplemente esto: descargue el archivo BFG jar (requiere Java 6 o superior) y ejecute este comando:

$ java -jar bfg.jar --delete-folders .git --delete-files .git --no-blob-protection my-repo.git

Se escaneará todo el historial del repositorio y se eliminará cualquier archivo o carpeta llamada .git . He probado esto contra un repositorio de prueba especialmente construido que contiene una carpeta .git , y funcionó bien.

Gracias a Michel Jouvin por recordarme que los archivos con el nombre ''.git'' también son ilegales en Git (y el mensaje de error reportado por Git no muestra de inmediato que son archivos, en lugar de carpetas), he actualizado esta respuesta para reflejar eso.

Revelación completa: soy el autor de BFG Repo-Cleaner.