2012-02-11 6 views
5

Duplicar posible:
Locking binary files using git version control systemEn Git, ¿hay alguna manera de marcar un archivo como "puro"?

estoy cometiendo un archivo que nunca debería ser se fusionaron, pero sobreescriben (tal vez con una advertencia) cuando otras personas tiran. ¿Hay alguna forma de lograr esto?

+1

¿De qué manera es "puro"? ¿Es un archivo derivado, o quizás un archivo binario? – cmbuckley

+0

No pude pensar en otra palabra. Inmergable, tal vez? Sí, para nuestros propósitos, digamos que es un archivo derivado. –

+0

Esto huele mucho a un argumento de 'Necesito bloqueos en Git', aunque redactado de manera diferente. Lo que está pidiendo va en contra del verdadero espíritu de un DVCS. – Perception

Respuesta

5

No está claro cuál es su situación real. La primera pregunta que debe hacerse es si el archivo realmente necesita ser rastreado: los archivos no fusionables a menudo son archivos derivados, como sugiere en los comentarios, y por lo tanto no es necesario (y no debe) rastrearse.

Si realmente necesita hacer un seguimiento, ¿se trata de un archivo binario? Git no intenta combinar archivos binarios; siempre aparecen como conflictos de combinación. Git es bueno para detectar archivos binarios, por lo que en este caso, probablemente estés a salvo. Si no es un archivo binario, entonces aún obligas a Git a manejarlo de manera apropiada. En un archivo de .gitattributes, añadir algo como:

path/to/file merge=binary 

Esto dirigirá a tratarlo como un archivo binario para los propósitos de la fusión. También podría, si quisiera, definir un controlador de combinación personalizado. Utilice merge=my_merge_driver en el archivo gitattributes, a continuación, en su gitconfig añadir algo como:

[merge "my_merge_driver"] 
    name = descriptive name 
    driver = my_script %O %A %B 

Los tres argumentos para el guión son la versión ancestro común (O para el original), la versión de la rama actual (A) y la otra rama de versión (% B): son archivos temporales, y se supone que el controlador de fusión realiza la fusión y deja el resultado en% A. Consulte man gitattributes para obtener más información al respecto.

+0

¿Esto funcionaría incluso en una fusión rápida? – Carl

+0

@carleeto El controlador de combinación solo se invoca si el archivo realmente necesita fusionarse, que no es el caso en una fusión de avance rápido. Pero a menos que esté haciendo algo diferente al OP aquí, eso no importa: la fusión de avance rápido ya está sobrescribiendo la versión original con la versión fusionada. – Cascabel

+0

Gracias por eso. Solo estaba tratando de evitar que algunos productos de compilación molestos que estaban en el repositorio principal me distraigan en mi sucursal :) – Carl

Cuestiones relacionadas