2011-12-16 19 views
6

Tuve un problema con git. Tengo un repositorio de un proyecto que está envejeciendo y quiero comenzar una nueva versión. Creé una nueva sucursal (3.0-wip) y borré los archivos y las carpetas para comenzar de nuevo. Sin embargo, si pago en mi rama principal, los archivos y las carpetas también desaparecen de allí.Mantener una estructura de directorios diferente en diferentes ramas de git

¿Cómo puedo tener mi repositorio así que mi rama principal tiene todo lo que tiene el repositorio remoto, pero un directorio de trabajo completamente diferente en mi 3.0-wip que puedo modificar a mi antojo sin destruir los archivos y carpetas en cualquier otra rama?

+0

cometiste a su sucursal de 3.0 WIP antes de salir a la rama principal? Si no, ese es probablemente el problema. –

+0

He clonado repo externo. Creado y comprobado nueva rama '3.0-wip'. Archivos/carpetas eliminados a través de Finder. Creó un nuevo archivo 'index.php' y lo cometió. Si selecciono mi rama 'master', entonces los archivos aún se han ido, y' git status' muestra todos los archivos/carpetas como 'deleted:'. –

+1

¿Has añadido git? | git agregar -u antes de su compromiso? ¿Cómo cometió esos cambios en su rama 3.0-wip? –

Respuesta

6

Commited cambios en una rama no afectan a otra rama. Debes comprometer todas las eliminaciones también, eso es lo que Dominic intentó explicar. Simplemente hazlo:

$ git co $NEWBRANCH 
$ git status 

Y verás tropecientos de eliminaciones sin compromiso. Debe usar git rm para eliminar archivos.
No estoy seguro git add --all se encargará de las eliminaciones también. De todos modos, esta es la OMI, no es la mejor manera de comenzar de nuevo ya que la nueva sucursal seguirá teniendo el historial anterior.

creo que es mejor crear un nuevo "disconected" se comprometen:

  1. Crear una nueva operación: mkdir $DIR; cd $DIR; git init
  2. Crear cometer el inicial. touch README; git add --all; git commit -m "Init"

Ahora ve a al repo original y:

  1. añadirlo como un mando a distancia: git remote add start-anew $DIR/.git
  2. tomarla: git fetch start-anew
  3. tirón en: git co -b start-anew start-anew/master

Y voila una rama con historia fresca y vacía.

Es posible que desee eliminar el control remoto y también cambiar el control remoto de la bifurcación. Normalmente estoy editando .git/config manualmente, hasta ahora sin ningún accidente.

+0

Traté de seguir esto, pero cuando traté de buscar el repositorio 'start-anew', aparece el mensaje 'fatal: El extremo remoto colgó inesperadamente'. –

+0

¿Funciona para mí con 'git versión 1.7.6.4'? – Martian

+0

Me funcionó presionando el repositorio 'start-anew' en Github, y luego ir a buscar desde allí. Debe ser algo que tenga que ver con intentar recuperar desde mi máquina local. –

8

Lo que está sucediendo es que no estás usando git correctamente. No hay ningún problema en crear una sucursal y eliminar archivos y carpetas. Cuando vuelva a su rama principal, los archivos y carpetas eliminados se restaurarán, ya que no se han eliminado de esa rama.

Lo que está sucediendo en su caso es que ha eliminado los archivos/carpetas de git, utilizando el sistema operativo delete, en lugar del comando "git rm". Es por eso que el estado de git los informa como "eliminados". También es la razón por la que los archivos permanecen eliminados cuando cambias de rama. git espera que los archivos estén allí y que no.

El estado de Git te dice que ejecutes "git add" pero eso no funciona. Como el archivo ya no está allí, la ejecución de git add fallará en silencio. Puede que no lo note, pero el mensaje también le indica que ejecute "git rm". Puede pensar que no puede hacer eso ya que el archivo se ha ido, pero eso no es cierto. El comando rm seguirá teniendo éxito al eliminar el archivo del repositorio, aunque ya lo hayas eliminado del sistema de archivos.

La otra cosa, y más fácil que puede hacer es ejecutar git add -A. La bandera -A le dirá agregar a aviso cualquier archivo eliminado o agregado.

probar este para una prueba:

git init test-delete 
cd test-delete 
touch filea 
mkdir dir_b 
touch dir_b/fileb 
git add . 
git commit -m "Initial commit" 
git checkout -b new_branch 
rm -rf dir_b 
git add -A 
git commit -m "deleted files from branch" 
(ls to prove files arent' there) 
git checkout master 
(ls to show files have been restored) 
git checkout new_branch 
(ls to show files are gone again) 
Cuestiones relacionadas