2011-05-15 20 views
9

Tengo un repositorio público descubierto.¿Es posible limpiar un repositorio desnudo?

El problema es que ya lo estoy usando desde hace mucho tiempo y eso significa que hay una gran cantidad de basura en el repositorio desnudo. Hay toneladas de ramas muertas, etiquetas eliminadas, etc. ...

¿Hay algún comando para limpiar el repositorio desnudo? Algunos como git remote prune que funcionan para el escenario opuesto?

Editar: Ya que parece haber alguna confusión. Esta es mi configuración:

DevelMachine1 
^
    | 
    v 
MainDevelRepo <-> MainRepo -> PublicBareRepo (with a lot of junk) -> The World 
^
    | 
    v 
DevelMachine2 

Respuesta

3

Después incluso algo más de información:

MainRepo -> PublicBareRepo (with a lot of junk) -> The World 

Así que el problema está aquí. De vez en cuando haces un push de MainRepo a PublicBareRepo, que ahora contiene cosas que ya no son válidas y no deberían estar allí. En el futuro, asegúrate de empujar solo las ramas que deberían estar allí.Creo que lo principal ahora es eliminar las ramas de ella, y entonces tengo que dar un paso atrás a mi primera respuesta (suponiendo que estamos hablando de la misma clase de basura)

git push PublicBareRepo :someBranch1 
git push PublicBareRepo :someBranch2 

Después de algo más de información del OP:

Parece que es el diseño del repositorio lo que está causando problemas y un --mirror es la manera de resolver esto. Si A es el repositorio básico principal al que los desarrolladores están llevando sus cosas, y si B es un repositorio público, entonces B debería ser un clon de A con la opción --mirror.

Lo que hay que hacer es hacer "actualización remota git" (suponiendo B ya es un espejo de A) en B por lo que se actualice a sí mismo volver a ser idéntica a A.


Respuesta original :

Si desea eliminar una rama en el repositorio remoto que puede hacer:

git push origin :branchName 

lo mismo ocurre con cualquier ref realmente, por ejemplo, para una etiqueta:

git push origin :tagName 
+0

¿Qué pasa si hay dos docenas de sucursales antiguas? Parece que debería haber algún comando para esto ... '--mirror' es quizás el más cercano, pero hace demasiado. – Cascabel

+0

El problema es que esas ramas no existen localmente. Además, simplemente editar el repositorio simple sería mucho más fácil que llamar a git push para cada una de las ramas obsoletas. Lo que estoy buscando es algo así como 'git remotes podar' que automatizaría la tarea. –

+0

¿Empujamos las etiquetas? Como en no hay '--tags'? Y una vez que se eliminan las etiquetas, ¿por qué nos preocupamos por la limpieza? – manojlds

3

Todos esos objetos no referenciados debe desaparecer con el tiempo, teniendo en cuenta:

Así que incluso si no tiene acceso local directo al repositorio remoto remoto, el simple hecho de "usarlo" (presionarlo) es eno ugh para activar gc y prune en dicho repositorio desnudo.


Nota: mi respuesta fue en el contexto de un acuerdo de recompra desnuda a distancia (no se trabaja directamente con un acuerdo de recompra al descubierto, usted está empujando a él)

git remote prune es una operación que se hace en un locales repo (una no-desnudo, donde se ha podido recuperar algunas ramas remotas y tienen un montón de seguimiento de las ramas bajo la remotes/* espacio de nombres de dicho local de la cesión temporal)

la limpieza de un mando a distancia (desnudo aquí) repo significa empujar :refs como se menciona en Magnus Skog en his answer.
Si los árbitros no existen en la corriente repo local 'DevelMachinex', entonces no hay otra solución real que:

  • clonación --mirror el repositorio remoto desnudo 'MainDevelRepo' (obtendrá todos aquellos ramas rancios como ramas de seguimiento remoto locales)
  • ramas Eliminar localmente
  • push --mirror, ya the documentation la mención "árbitros borrados se eliminan del extremo remoto".
+0

Creo que lo que significa que el PO es que el mando a distancia tiene ramas rancio, así como algunas etiquetas que no quiere más, por lo que quiere hacer algún tipo de operación de empuje de eliminación para eliminar los refs en el control remoto que no están en su repositorio local. (Como 'push - mirror ', excepto solo en cabezales y etiquetas ... y desafortunadamente no puedes hacer algo como' git push --delete--all; git push --all'.) – Cascabel

+0

Por favor, lee en lo que 'git remotes podar' realmente hace. Lo que describes es totalmente irrelevante para esta pregunta. –

+0

@Let_Me_Be - quieres decir 'git remote prune'. Creo que deberías usarlo correctamente antes de pedirle a alguien que lo lea. – manojlds

Cuestiones relacionadas