2012-07-16 18 views
6

Duplicar posibles:
GIT: Ignoring Version-Controlled Files¿Cómo ignorar los archivos existentes y comprometidos en git?

Hay un montón de respuestas de todo .gitignore en Stackoverflow, todavía no he encontrado una respuesta:

tengo un proyecto Git existente, con un readme.md y un sample_folder/, ambos en el nivel superior. Quiero eliminar estos de mi repositorio de git (hub) en general. Pero me gustaría ignorarlos, es decir, evitar que sean extraídos, en un determinado repositorio local clonado, es decir, en una máquina de despliegue.

.gitignore Entiendo, solo se trata de ignorar archivos no comprometidos? Francamente, no encuentro nada en torno a ocultar (de tirar + comprometer) cosas que ya están comprometidas ...

En los días de Perforce lo excluía simplemente de las respectivas 'especificaciones del cliente' (que es muy cerca de un acuerdo de recompra clonado localmente):

//whatever/myProject 
-//whatever/myProject/readme.md 
-//whatever/myProject/sample_folder 

Claro, podría conformarse con una segunda rama en la que sólo tiene que borrar readme y la carpeta completa de la muestra. Pero luego, tendría que seguir fundiéndome en cada pequeña solución de 'desarrollo'. Que es algo, preferiría evitar ... Prefiero una 'excepción' local sobre una rama (rastreada).

Además, creo que cada vez que git rm --cached hacer commit (que también puede suceder de vez en cuando de mi 'repo despliegue') ...

+0

es difícil entender su problema ... ¿por qué le gustaría que los archivos ignorasen los tiradores? Puedo imaginar el origen del problema, ya que no todos los repos estarían en el mismo estado mientras que en el mismo commit – CharlesB

+0

Bueno, para cualquier persona interesada/desarrollador es útil tener, por ejemplo, una carpeta de ejemplo (o una carpeta de documentos o un archivo Léame) , en un escenario de despliegue, todo esto es superficial, quizás incluso problemático ... –

+0

@Wooble: ¡Esto suena muy prometedor! Montones de gracias. Investigaré. –

Respuesta

0

Esto no una cuestión acerca .gitignore. Si estos son código no, debe rastrearlo en un repo separado vía submódulos y simplemente no ejecutar ningún comando git submodule en el servidor. O simplemente scripts la eliminación de estos en la máquina de implementación después de un pago.

2

Parece que podría estar utilizando un pago de git como su método de implementación. Algunas veces esto funciona, a veces necesita un poco más. Si hay artefactos de desarrollo en el repositorio, necesita un poco más.

La forma más obvia de tratar con esto es tener una secuencia de comandos de implementación que realiza la extracción y luego elimina los directorios y archivos superfluos. Desafortunadamente, esto te deja con un repositorio parcial que podría confundir a las personas y agrega un guión especial que debe recordar para ser utilizado y actualizado.

Otra forma de manejarlo es tener una rama de implementación. Cree una sucursal, elimine los archivos y directorios ofensivos y luego extraiga de esa sucursal. Sí, tendría que fusionar los cambios de su rama de desarrollo en implementación. Usted ve esto como una tarea ardua, pero es una salvaguarda. Si está aprovechando rápidamente las posibilidades de desarrollo y tan rápido como las está implementando, es posible que tenga un problema con su ciclo de implementación.

Quiere un paso entre el desarrollo y la implementación en el que pueda considerar y probar sus cambios. Si nada más, esto evita que el desarrollador A haga un mal cambio y que el administrador B agrave el error al ponerlo en producción sin saberlo. También desea poder impulsar el desarrollo y compartir su trabajo con otros desarrolladores sin TAMBIÉN ponerlo en riesgo de producción.

Es posible que usted sea la única persona que se encarga de la implementación y el desarrollo en este momento, pero puede que no sea más tarde. Si nada más, esto te protege de empujar accidentalmente un cambio inestable al desarrollo y luego agravar ese error al desplegarlo antes de que tengas la oportunidad de pensar.

+0

Para un lanzamiento serio, ciertamente tendría una rama 'estable', por supuesto. Pero para mi "implementación" rápida y sucia estoy muy aversión al esfuerzo :) Y quiero volver a hacer pequeñas correcciones (sin ver muchos cambios falsos, es decir, todas esas eliminaciones, incluso si no voy a agregarlas al escenario). Voy a investigar el comentario de Wooble arriba ... –

5

Quizás recibí la pregunta equivocada, pero ¿no resolvería el problema a continuación?

git rm --cached readme.md sample_folder/* 
echo "readme.md" >>.gitignore 
echo "sample_folder/*" >>.gitignore 
git commit -am "Untracked some files" 
Cuestiones relacionadas