2010-07-02 15 views
7

Estoy trabajando en un proyecto de Linux incorporado. Nuestro proceso de compilación crea una imagen que se transfiere a un dispositivo. Muchos de nuestros archivos requieren la propiedad raíz para que el sistema funcione correctamente. Me encontré con un problema cuando traté de extraer y algunos de esos archivos fueron modificados - git no pudo escribir esos archivos, por lo que reinició con fuerza e hizo sudo pull. Luego, cuando cambié de rama, decía "no puedo desvincular ..." para todos esos archivos, pero cambió de lugar de todas formas, cuando intenté volver a la rama no me lo permitía porque tenía cambios locales.¿Cómo manejas la propiedad de archivos en git?

Así que no estoy haciendo algo bien; ¿Cuál es la forma correcta de lidiar con esto?

+3

Entonces, tengo curiosidad: ¿por qué necesita la propiedad raíz en los archivos? ¿Qué se rompería sin eso? – Amadan

Respuesta

7

Estructuraría su sistema para que a los archivos fuente no les importe qué propietario son. Puede verificar esto dentro y fuera de git sin preocuparse de qué permisos tienen o quién es el propietario (especialmente dado que "propietario" no es significativo en todos los sistemas que una implementación de git pueda servir).

Cuando desee generar la imagen incrustada, copie todo en un nuevo directorio y luego establezca los permisos que necesite.

+1

Esto realmente resultó ser bastante fácil de implementar. Hice una búsqueda -user root> rootlist.txt e hice una secuencia de comandos que revisa los archivos en rootlist.txt para rootear y luego llama al script de compilación y luego recupera los archivos para el usuario actual. –

+0

La solución en mi comentario anterior fallará si un nombre de archivo tiene un carácter de nueva línea; es mejor hacer que los nombres de archivo de salida sean nulos. Desde esta pregunta, me he cambiado al uso de Buildroot, que es mucho mejor que mi configuración desde cero. –

3

La forma más fácil (si es posible) sería no hacer ninguna operación (clonación, etc.) como root, porque eso lleva a que el otro usuario no pueda trabajar con los archivos.

Una alternativa sería usar git init --shared para configurar permisos compartidos (de grupo o todos) para el repositorio, seguidos por git remote add origin http://host/repo.git y git pull origin master. Que es básicamente un clon con permisos menos estrictos.

1

No estoy seguro de entender por qué algunos archivos deben ser chowne 'd root. Intuitivamente, supongo que tu problema es la dependencia del propietario, no que Git no almacene la propiedad. Lo que puede hacer es chown en usted su construcción.

5

Para construir sobre la respuesta de Karmastan, las palabras mágicas aquí son "script de compilación".

Los archivos en git no tienen que parecerse a las versiones de implementación. No despliega archivos .c, los compila primero. Del mismo modo, algunos archivos de configuración también pueden pasar por un proceso de compilación antes de implementarse/instalarse.

Cuestiones relacionadas