2010-07-02 12 views
7

Sto lavorando a un progetto Linux incorporato. Il nostro processo di compilazione rende un'immagine che viene mostrata su un dispositivo. Molti dei nostri file richiedono la proprietà di root per il corretto funzionamento del sistema. Mi sono imbattuto in un problema quando ho provato a tirare e alcuni di questi file sono stati modificati - git non è stato in grado di scrivere quei file, quindi è stato resettato e ha fatto sudo pull. Poi, quando ho cambiato succursali, ho detto "Impossibile scollegare ..." per tutti quei file, ma ha cambiato comunque rami, quindi quando ho provato a tornare al ramo non me lo permetteva perché avevo delle modifiche locali.Come gestisci la proprietà dei file in git?

Quindi non sto facendo qualcosa di giusto; qual è il modo corretto per affrontare questo?

+3

Quindi, sono curioso: perché è necessaria la proprietà di root sui file? Cosa si romperebbe senza di esso? – Amadan

risposta

7

Vorrei strutturare il sistema in modo che i file di origine non si preoccupino del proprietario. È possibile controllare questi elementi dentro e fuori di git senza preoccuparsi di quali autorizzazioni hanno o di chi è il proprietario (soprattutto perché "proprietario" non è significativo su tutti i sistemi che una distribuzione git probabilmente servirà).

Quando si desidera generare l'immagine incorporata, copiare tutto in una nuova directory e quindi impostare le autorizzazioni necessarie.

+1

In realtà si è rivelato piuttosto facile da implementare. Ho fatto un find -user root> rootlist.txt e ho creato uno script che raggruppa i file in rootlist.txt in root, quindi richiama lo script di build e reindirizza i file all'utente corrente. –

+0

La soluzione nel mio commento precedente avrà esito negativo se un nome file ha un carattere di nuova riga; è meglio creare nomi di nomi delimitati da null in uscita. Dal momento che questa domanda, mi sono trasferito a utilizzare Buildroot, che è molto più bello del mio setup da zero. –

3

Il modo più semplice (se possibile) è di non eseguire alcuna operazione (clonazione, ecc.) Come root, poiché ciò porta l'altro utente a non essere in grado di lavorare con i file.

Un'alternativa potrebbe essere l'utilizzo di git init --shared per impostare autorizzazioni condivise (di gruppo o tutte) per il repository, seguito da un git remote add origin http://host/repo.git e un git pull origin master. Che è fondamentalmente un clone con permessi meno rigidi.

1

Non sono sicuro di aver capito perché alcuni file devono essere root chowne. Intuitivamente direi che il tuo problema è la dipendenza dal proprietario, non che Git non memorizzi la proprietà. Che cosa è può fare è chown in te la tua build.

5

Per costruire la risposta di Karmastan, le parole magiche qui sono "script di costruzione".

I file in git non devono apparire come le versioni di distribuzione. Non si distribuiscono i file .c: prima li si compila. Allo stesso modo alcuni file di configurazione possono passare attraverso un processo di compilazione prima di essere implementati/installati, anche.

Problemi correlati