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. .gitignorefunciona 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.txtque se agrega a mi repositorio git y se incluye cuando alguien clona ese repositorio. git add .no debe agregardefault_values.txtal 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-unchangedestado se perderá una vez que se extraiga un cambio ascendente.fuente
--no-skip-worktreepara agregar sus cambios.--skip-worktreeestado 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 ignoreygit 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-worktreelugar deassume-unchangedmá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
.samplesufijo. Así que en tu casodefault_values.txt.sampleEche 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.jsonque 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/myfilesolo 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