17

He visto que la gente recomienda que todos los desarrolladores configuren un enlace simbólico en su máquina desde C:\project\.git\rr-cache a una carpeta compartida \\server\rr-cache.Compartiendo memoria caché

Sin embargo, parecería más conveniente compartir la carpeta incluyéndola en el repositorio de git, si eso es posible. He visto a personas mencionar esta solución, pero no cómo hacerlo.

¿Alguna idea?

+0

Si tiene que compartir su memoria caché entre sí, con demasiada frecuencia puede empujar las ramas que se vuelven a establecer. Creo que la solución estándar para este problema no es compartir los cachés, sino nunca volver a establecer la base de lo que es visible. Entonces, todos pueden limpiar sus propios problemas de rebase de sus propias sucursales privadas, ya que probablemente saben lo que están haciendo. –

+1

No puede incluir rr-cache en el repositorio, porque ya está en él. En caso de que haya preguntado si es posible hacerlo parte de la historia: sí, pero no parece una buena idea (cambia debido a los cambios en el historial, no por el cambio de contenido, que Git rastrea, y tiene para configurar el rr-caché rastreado en cada repositorio nuevo) – fork0

+0

que es cierto, pero si lo configura mediante script, ya está listo. –

Respuesta

14

Se puede compartir a través de una sucursal dedicada. Desea detenerse si hay un conflicto en esa rama y resolverlo, ya que significa que hubo intentos de resolver el mismo conflicto de 2 maneras diferentes. No hace falta decir que esa será la excepción a la regla.

Para los demás en esta pregunta, google "Sucursal por función" para ver dónde esto es útil.

Los ganchos pueden automatizar la sincronización de la rama rr-cache común.

Esto es lo que necesita automatizar. re-compartir es una rama de ejemplo con la que se está fusionando, rr-cache es una rama que almacena las resoluciones; todos estos pasos funcionaron sin problemas:

git checkout --orphan rereresharing start-sprint-1 
git --git-dir=.git --work-tree=.git/rr-cache checkout -b rr-cache 
git --git-dir=.git --work-tree=.git/rr-cache add -A 
git --git-dir=.git --work-tree=.git/rr-cache commit -m "initial cache" 
git clean -xdf 
git checkout rereresharing 
git merge --no-ff FTR-1 
git merge --no-ff FTR-2 
vim opinion.txt # resolve conflict 
git add -A 
git commit 
git checkout rr-cache 
git --git-dir=.git --work-tree=.git/rr-cache add -A 
git --git-dir=.git --work-tree=.git/rr-cache commit -m "resolution" 
git remote add origin ../bpf-central 
git push origin rereresharing rr-cache 
cd - # assumes you were previously in the other local repo 
git remote add origin ../bpf-central 
git fetch 
git branch rr-cache origin/rr-cache 
ls .git/rr-cache 
git --git-dir=.git --work-tree=.git/rr-cache checkout rr-cache -- . 
ls .git/rr-cache 

Ahora está listo para hacer la misma fusión y tendrá su conflicto resuelto.

+3

Puede crear una bifurcación desconectada para rr-cache, es decir, 'checkout --orphan rr-cache'. Se ve mejor – kan

+0

¡Impresionante! Actualizaré la respuesta. –

+0

-b y --orphan no son compatibles en las últimas versiones de git. –

4

Quizás en lugar de compartir rr-cache otra opción sería conocer las resoluciones de conflictos del historial existente de Git usando rerere-train.sh.

+0

¿Cuándo se ejecutará esto? ¿Siempre que se encuentra un conflicto de fusión? –

+1

Tendrá que ejecutarlo cada vez que alguien más que usted haya resuelto un conflicto y le gustaría habilitar a Git para reutilizar esa resolución localmente. – sschuberth