¿Es posible indexar un file que se ignora?

Aquí está mi situación específica:

Branches: branch-a branch-b branch-c Working directory: file-a file-b ... 

No deseo que el file-a registre en el repository, pero sí quiero mantener un file-a diferente file-a almacenado en alguna parte para cada twig. Digamos que este file-a contiene algo único para cada twig, como el nombre de la sucursal.

¿Hay alguna forma de hacer esto?

Creo que me gustaría poner el file-a en .gitignore para que no se agregue al repository. Sin embargo, el problema con esto es que no puedo indexar el file después de hacer eso.

Lo que creo que necesito es algo así como .gitignore pero para la transición del área de preparación a la confirmación.

Una posibilidad es usar git hooks para ayudarte. No es exactamente simple, pero nuevamente su request no encaja con el paradigma estándar de git.

Supongamos que quiere que file-a.txt comporte como se menciona. Luego crea files (por ejemplo) con los siguientes nombres:

file-a.txt.br_master , file-a.txt.br_dev , …

etc

En cada uno, coloque lo que quiera que el file esté en esa twig. A continuación, abra / cree el file .git/info/exclude (que es como un .gitignore local que no se implementa) y agregue la línea:

file-a.txt*

Esto evitará que todos los files anteriores aparezcan como files confirmables en su espacio de trabajo.

La magia que lo uniría sería un git hook (ver, por ejemplo, https://www.atlassian.com/git/tutorials/git-hooks/local-hooks para un tutorial) que se ejecuta post-checkout . El script verificará que se trata de un logging de sucursal, y luego copyrá el file file-a.txt.br_{branch_name} en file-a.txt . La forma exacta del script depende de usted, pero podría ser bash, o algo así como Python, si lo prefiere.

No, no puedes hacer eso.

Puede usar la function (nueva desde Git versión 2.5) git worktree de trabajo múltiple para mantener cada twig en su propio tree de trabajo privado, y luego simplemente hacer que estos files no se rastreen o ignoren, y nunca cambiar twigs en ningún tree de trabajo .

Tenga en count que todavía hay algunos errores en el git worktree incluso a partir de la versión 2.9 de Git. Los más flagrantes se corrigieron en 2.6, pero el trabajo todavía está en curso aquí. Sin embargo, deberías estar bien si tienes 2.6 o más y evitas cualquier cosa particularmente complicada o inusual.

Agregue estos files a su repository y confirme. git add file-a y commit. Cuando vaya a fusionar o empujar sus twigs al control remoto, ya sea:

1: Si no le importa que su repository tenga una confirmación vacía, elimine el file usando filter-branch :

 git filter-branch --tree-filter 'rm -f file-a' HEAD 

2: si te importa tener un compromiso vacío. Su confirmación es solo el file del que desea deshacerse. Puede encontrar todas las confirmaciones que cambian ese file por:

 git log --follow -p -- file-a 

y luego Elija dejar caer las confirmaciones que cambiaron el file. (rebase interactivo)

Si no quiere comprometerlo, ¿por qué quiere escenificarlo?

Podrías hacer un gancho pre-commit .

 #!/bin/bash git reset <path_of_file-a> 

Puedes git add al índice, pero este gancho no lo comprometerá. Si desea confirmarlo, agregue la opción -n para omitir este enlace cuando git commit . Si desea mantener los cambios realizados en el file-a antes de git reset , puede agregar git stash antes.