2011-09-08 10 views
7

Sé que puede utilizarasociar un vacío de Git comprometerse con los archivos de

git commit --allow-empty 

poner una confirmación sin ningún cambio real de los archivos en el repositorio.

El problema que tengo es que necesito poder crear tales commits vacíos que están asociados con varios archivos en el repositorio. En otras palabras, quiero ser capaz de poner en algunas confirmaciones vacías para los que

git log -- <filename> 

mostrará la confirmación, pero no puedo encontrar una manera de hacer esto.

Gracias!

+5

¿No es una confirmación vacía por definición no relacionada con ningún archivo? ¿Qué estás tratando de hacer exactamente? –

+0

@Jeff: ¿Para qué sirve hacer una confirmación vacía? –

+0

@Carl Estoy intentando hacer una confirmación vacía relacionada con archivos específicos. – Jeff

Respuesta

7

De git log --help:

[--] <path>... 
    Show only commits that affect any of the specified paths. 

¿Quieres git log <path>... para mostrar una confirmación que hace no afectan a las rutas especificadas. Eso no va a suceder.

Lo que puede hacer, sin embargo, es poner los nombres de los archivos en el mensaje de confirmación y luego usar git log --grep=<filename>.

¿Quizás no lo quiere en el mensaje de compromiso? Luego póngalo en las notas de compromiso: git notes add -m <filename>. Puede que tenga que escribir una pequeña secuencia de comandos para grep para las notas, pero la plomería git debería hacerlo bastante fácil.

+0

No estoy pidiendo que cambie el comportamiento de 'git log': quiero que muestre las rutas afectadas. Lo que estoy buscando es una forma de decirle a git que considere la ruta X como una ruta afectada para una confirmación vacía. – Jeff

+1

@Jeff: @drizzd y Carl Norum son bastante correctos: una confirmación vacía (en este sentido) * por definición * no introduce cambios, por lo que no hay "rutas afectadas". No hay forma de hacer lo que quieras sin cambiar el comportamiento de 'git log'. –

+0

No estoy seguro de por qué también está mencionando 'git log', pero como dije, no estoy pidiendo que cambie su comportamiento. Lo que esperaba era una forma de decirle 'git commit' para marcar ciertas rutas como afectadas, incluso si el diff es nulo.Luego, todos los demás subcomandos 'git' harían lo correcto en términos de mostrar las rutas afectadas, incluido' git log'. – Jeff

5

La razón por la que esto no se puede hacer es que para git, una confirmación es una instantánea del estado de todos los archivos en el proyecto en ese momento, y los archivos afectados son inferidos comparando un compromiso a su padre (Los archivos afectados son solo aquellos que difieren entre los dos). Por lo tanto, no hay manera de marcar artificialmente una ruta como afectada, porque una confirmación no almacena esa información directamente.

Una cosa que podría hacer es cambiar los permisos de archivo (por ejemplo, establecer o deshacer escritura de grupo) en las rutas en cuestión, que se capturarían como un cambio, aunque el contenido del archivo sea el mismo. Y siempre puede tener dos confirmaciones adyacentes, una que cambie los permisos y otra para volver a cambiarlas, si no desea que los permisos permanezcan alterados. Es un poco complicado, pero funcionaría, especialmente si los permisos de los archivos no son importantes en su caso.

Cuestiones relacionadas