Quiero hacer una copy de security de un proyecto versionado de Git, incluidos los cambios al directory de trabajo, y un puntero al repository remoto.
La carpeta respaldada debe contener los files del directory de trabajo y los files .git necesarios para permitir al usuario navegar al proyecto y ejecutar git pull
(u otro command git) de forma segura. No importa si el directory remoto necesita ser descargado nuevamente y verificar la "integridad" con el directory de trabajo.
No puedo hacer una copy de security de toda la carpeta .git, ya que contiene files muy grandes.
Intenté estos commands:
git --aggressive
git reflog expire --expire=now --all
git repack -ad
git prune
Pero todavía dejan files grandes (> 200 MB) *.pack
en la carpeta .git/objects/pack
.
objects
pero eso hace que el repository sea inválido: fatal: Not a git repository (or any of the parent directories): .git
.
git init
después de eliminar la carpeta de objects
, pero eso da el error fatal: bad object HEAD
, y no puedo hacer ningún otro command. .git
, a exception de .git/config
, y aún no es un repository válido de git.
git init
después de eliminar esas carpetas, pero luego los cambios en el directory de trabajo se "desvían", a pesar de que son los mismos files en el repository remoto, así que estoy obligado a ejecutar git clean -fd
y download el repository de nuevo . ¿Hay alguna manera de crear un repository de Git puro, con un mínimo de files de package, mientras se mantiene el estado "rastreado" del directory de trabajo?
Puedes crear:
un file del tree de trabajo:
zip -r myrepo.zip myrepo -x *.git*
un package del .git
repo (como se explica aquí ):
cd myrepo git bundle create /tmp/repositoryname.bundle --all
Eso le daría dos files (más fácil de copyr sobre cualquier location que desee), con el tamaño mínimo.
Pero si su repository es grande, es posible que desee crear un package incremental, con solo los últimos commits (siempre que la location de destino donde pueda usar ese package ya tenga el rest del historial)
Los files de package en .git/objects
contienen el historial de las versiones anteriores. Si desea hacer una copy de security de git repo con los cambios del directory de trabajo, debe mantener los files del package integrados. También hay una manera de llevarlo al repository desnudo y luego clonarlo en cualquier lugar que desee. Detalle los pasos a continuación:
git init --bare
para la copy de security con git init --bare
. git remote add backup <path for bare repo> git push backup --all
En la ruta de repos repo, agregue la información repo remota en el file .git/config
:
[remote "origin"] url = <remote repo URL> fetch = +refs/heads/*:refs/remotes/origin/*
git clone <path for bare repo>
. En el repository clonado, si desea que los cambios pasen directamente al repository remoto, puede cambiar la URL en .git/config
o usar git remote set-url origin <remote URL>
.