He creado una versión predeterminada de un archivo incluido en un repositorio git. Es importante que cuando alguien clone el repositorio, obtenga una copia de este archivo. Sin embargo, me gustaría configurar git para que ignore los cambios en este archivo más adelante. .gitignore
funciona solo en archivos sin seguimiento.
Mi motivación es que este archivo contiene información específica de la máquina. Me gustaría proporcionar valores predeterminados, al tiempo que permitiría a las personas realizar cambios locales que no se retrasarán al repositorio de origen, creando conflictos de fusión cuando realizamos nuevos cambios.
En general, somos bastante vagos y usamos git add .
mucho, así que estoy bastante seguro de que si no puedo decirle a Git que ignore este archivo, los cambios en él terminarán comprometiéndose y empujados.
Para resumir,
- Me gustaría crear un archivo, llamarlo
default_values.txt
que se agrega a mi repositorio git y se incluye cuando alguien clona ese repositorio. git add .
no debe agregardefault_values.txt
al commit.- Este comportamiento debe pasarse a cualquier clon del repositorio.
fuente
Respuestas:
Como muchos otros han mencionado, una buena solución moderna es:
Eso ignorará los cambios en ese archivo, tanto local como ascendente, hasta que decida permitirlos nuevamente con:
Puede obtener una lista de archivos marcados como omitidos con:
Tenga en cuenta que
--skip-worktree
, a diferencia , el--assume-unchanged
estado se perderá una vez que se extraiga un cambio ascendente.fuente
--no-skip-worktree
para agregar sus cambios.--skip-worktree
estado de un archivo antes de poder cambiar de rama si ese mismo archivo se rastrea en la otra rama.git status
, pero cuando traté de pagar en una rama diferente, obtuveerror: Your local changes to the following files would be overwritten by checkout:
, incluso -f no ayudaerror: Entry 'wix-stores-merchant-app/demo/credentials.js' not uptodate. Cannot merge.
git ignore
ygit unignore
.Lo que estás buscando es
git update-index --assume-unchanged default_values.txt
.Consulte los documentos para obtener más detalles: http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html
fuente
skip-worktree
lugar deassume-unchanged
más información stackoverflow.com/questions/13630849/…El enfoque que generalmente he visto es crear un archivo con un nombre diferente, por ejemplo: default_values_template.txt y poner default_values.txt en su .gitignore. Indique a las personas que copien default_values_template.txt a default_values.txt en sus espacios de trabajo locales y que realicen los cambios necesarios.
fuente
.sample
sufijo. Así que en tu casodefault_values.txt.sample
Eche un vistazo a las secuencias de comandos borrosas / borrosas. De esta manera, puede controlar el archivo de la versión, pero cuando está desprotegido, lo "borrará" reemplazando los datos genéricos / de posición con datos específicos de la máquina en el archivo.
Cuando lo confirmes, lo "limpiarás" reemplazando la información específica de la máquina con información genérica o de posición.
Los scripts de difuminado / limpieza deben ser deterministas en el sentido de que aplicarlos varias veces, en diferentes órdenes, será el equivalente a ejecutar el último de la secuencia.
Lo mismo se puede aplicar con las contraseñas si necesita exponer su repositorio, pero el contenido puede contener información confidencial.
fuente
user.json
que deba sobrescribirse con los créditos de cada desarrollador, pero no quiero que el desarrollador verifique accidentalmente sus créditos.He resuelto esto definiendo el filtro "limpio" para simplemente capturar el contenido del archivo en el índice.
git show :path/to/myfile
solo debe imprimir el contenido del índice para el archivo especificado, de modo que podamos usarlo en un script para reemplazar la copia de trabajo con la copia intacta en el índice:Establezca eso como el filtro "limpio" para el archivo en cuestión (suponiendo que lo haya puesto en "discard_changes"):
Desafortunadamente, no puedo encontrar una manera de hacer esto generalizable a múltiples archivos, ya que no hay forma de saber qué archivo estamos procesando desde el script limpio. Por supuesto, no hay nada que le impida agregar una regla de filtro diferente para cada archivo, pero es un poco confuso.
fuente
Encontré una solución que funciona para mi equipo. Compartimos nuestros githooks a través de enlaces simbólicos y después de agregar un archivo de plantilla a git, agregué un enlace de precompromiso que verifica si el archivo de plantilla ha sido modificado y, de ser así, yo
git reset -- templatefile.txt
. Si es el único archivo modificado, también aborto la confirmación.fuente
Sugiero buscar en submódulos. Si coloca los archivos específicos de la máquina en un submódulo, git add debería ignorarlo.
fuente