Tieni .gitignore pulito?

0

Per me è logico che .gitignore includa solo i file che il progetto ha per produrre all'interno della directory di origine quando si esegue qualche passo di configurazione o generazione. Tutto il resto che riguarda il flusso di lavoro personale dovrebbe andare in .git/info/exclude .

Diciamo che sto iniziando un nuovo progetto usando, diciamo, CMake in modo che non ci sia mai bisogno di generare alcun file nella directory sorgente. Avrebbe senso vietare agli sviluppatori di usare .gitignore ?

Attualmente sto lavorando a un progetto più vecchio in cui gli sviluppatori sono abituati a costruire all'interno della directory dei sorgenti. Di conseguenza, .gitignore è disseminato di tutti i tipi di tipi di file. Mi è successo un paio di volte che spingo qualcosa e non si compila sulla macchina di qualcun altro e il motivo è che la mia directory sorgente differisce leggermente dalla loro a causa di alcuni file che non sapevo nemmeno dove c'erano perché .gitignore li ha resi invisibili.

    
posta Raul Laasner 13.03.2018 - 18:16
fonte

2 risposte

5

Sebbene .gitignore possa essere sovrautilizzato, è ancora uno strumento assolutamente necessario. Ho visto repository che includevano tutto, compresi i file temporanei di build, perché qualcuno ciecamente ha fatto un git add --all . Quindi, in che modo i vari meccanismi di esclusione del git rientrano in un processo di sviluppo?

  • .gitignore è per esclusioni specifiche del progetto generate dal processo di generazione. Per un progetto basato su CMake, si tratta in genere di una directory build e non di molto altro. Per un progetto con build in-source, si tratterebbe di qualsiasi file di output del processo di compilazione, ad es. *.o e alcuni file eseguibili denominati.
  • .git/info/exclude è per esclusioni specifiche del progetto che derivano dal tuo flusso di lavoro personale. Per esempio. File di configurazione IDE. I file di configurazione OTOH IDE dovrebbero a volte essere sotto il controllo del codice sorgente, specialmente se hai standardizzato il tuo IDE all'interno del tuo team.
  • ~/.gitignore è per esclusioni globali che derivano dal tuo flusso di lavoro personale, ad es. editor di swapfiles.

A volte vuoi ignorare la maggior parte dei file di un certo tipo mentre commetti altri. Non c'è una sola soluzione migliore qui.

  • È possibile ignorare questi file per impostazione predefinita. Se è necessario il controllo della versione di uno di questi file, è ancora possibile aggiungerlo in modo esplicito. Il pericolo è che ti dimentichi di aggiungerlo, perché git status non lo mostrerà.

    es. un progetto su cui lavoro genera file di copertura *.gcda durante i suoi casi di test. In genere voglio ignorare quelli. Ma il progetto è uno strumento di copertura. Quindi, se un test case dipende da un particolare file .gcda, commetto tale file come eccezione.

  • È possibile ignorare solo modelli di file di output specifici se si conosce un nome sufficientemente specifico. Per esempio. Lo faccio spesso per ignorare pacchetti e archivi, come /My-Project-v*.tar.gz .

  • Se possibile, utilizzare una directory di compilazione separata è probabilmente la migliore, perché puoi quindi ignorare la directory di build anziché i file concreti.

Il problema "non si costruisce su una macchina diversa" non può essere risolto proibendo l'uso di un .gitignore - si dovrebbe anche mettere fuori legge altri meccanismi di esclusione. L'unico modo per risolverlo è eseguire test automatici ogni volta che si preme. Configurare un server CI Jenkins non è molto difficile, quindi vai e fallo.

    
risposta data 13.03.2018 - 18:37
fonte
3

Esistono alcuni motivi chiari per avere un file .gitgnore e motivi per utilizzare un altro meccanismo di esclusione. La grande differenza tra i meccanismi di esclusione è ( reference ):

  • .gitignore è archiviato con il repository, quindi tutti hanno lo stesso standard ignora
  • .git/info/exclude esiste per il tuo singolo repository, ma solo la tua copia.
  • git config --global core.excludesfile ~/.gitignore_global esiste per l'intero profilo. Ciò significa che puoi ignorare i file standard per tutti i tuoi repository.

Le mie linee guida generali sono:

  • Utilizza .gitignore per progetti con posizioni standard per i file oggetto e i file binari completati (ad esempio MSBuild, Maven, Gradle, ecc.)
  • Utilizza .gitignore per le impostazioni del progetto specifiche dell'utente e i file di configurazione generati quando tutti utilizzano lo stesso IDE (ovvero i progetti di Visual Studio)

Oltre a ciò, usa quello che vuoi. Ho scoperto che mescolare e abbinare i file di progetto IDE Java all'interno di un team che utilizza IDE diversi è alquanto disordinato. La maggior parte degli IDE può generare il progetto dal tuo progetto Maven o Gradle, quindi è anche uno spreco. Vorrei prendere in considerazione l'utilizzo di più ignori globali per i file IDE Java.

Tutti i file ignorati non verranno considerati quando esegui git add . .

    
risposta data 13.03.2018 - 19:16
fonte

Leggi altre domande sui tag