Forza l'aggiunta nonostante il file .gitignore


413

C'è un modo per forzare gitl'aggiunta di un file nonostante il .gitignorefile?


4
Una domanda migliore potrebbe essere: perché dovresti farlo? Se si desidera rintracciare un file, annullarne l'annullamento (prefissare il suo modello nel .gitignorefile con !, ad es !dont/ignore/this/file.).
Ohad Schneider,

6
@OhadSchneider È utile se si forza il commit dei file di build su un altro ramo. Alcuni progetti lo fanno come StrongLoop per distribuzioni sicure
Deminetix il

5
@OhadSchneider Per noi, è più perché la maggior parte degli sviluppatori installa git con Visual Studio 2015, che aggiunge un gitignore globale alla cartella dell'utente. Ciò esclude file come * .dll e * .exe. Ciò è ottimo per i nostri nuovi progetti che utilizzano solo pacchetti nuget che vengono recuperati durante la compilazione, ma per un numero limitato di progetti più vecchi, utilizziamo ancora DLL a cui viene fatto riferimento manualmente nella soluzione. Per questi progetti, vorremmo includerli manualmente, invece di dire a tutti gli sviluppatori di commentare i file * .dll e * .exe nel gitignore globale.
Nullius,

4
@Nullius Non puoi semplicemente annullarli a un livello superiore .gitignore(per esempio, aggiungere un .gitignorenella stessa cartella della dll, o uno sopra, o qualcosa del genere)?
Ohad Schneider,

Risposte:


570

Vedi man git-add:

   -f, --force
       Allow adding otherwise ignored files.

Quindi esegui questo

git add --force my/ignore/file.foo

11
Uhm che non funziona, sullo stato git il file non è ancora mostrato
Segna il

5
Bene, l'ho provato per assicurarmi che funzioni davvero. Puoi descrivere il tuo ambiente (sistema operativo, versione git ...)? Questo è quello che ho praticamente fatto: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(non posso incollare le righe di commento, eseguire i comandi 1 per 1
Daniel Böhmer,

4
Lo stesso è successo a me, in precedenza avevo eseguito git update-index - presumo invariato sui miei file. Ho dovuto annullarlo con --no-assume-invariato e ha funzionato
Jako,

4
Questo funziona solo per me usando i caratteri jolly, usando git 1.9.5 su Windows, anche dopo aver provato --no - assume-invariato. "git add - f <nomefile>" non fa nulla, ma "git add -f *" funziona. L'uso di TortoiseGit funziona anche.
mhenry1384,

@ mhenry1384 Il motivo per cui funziona solo con caratteri jolly in Windows potrebbe essere dovuto all'uso del separatore di percorsi. Per me la barra "/" funziona ma la barra rovesciata "\" no. Il fatto che cmd / PowerShell converta "/" in "\" per noi semplifica l'esecuzione.
oh,

19

Nonostante la soluzione di lavoro di Daniel Böhmer, Ohad Schneider ha offerto una soluzione migliore in un commento:

Se il file viene generalmente ignorato e si forza l'aggiunta, in futuro può essere accidentalmente ignorato (come quando il file viene eliminato, viene eseguito un commit e il file viene ricreato.

Dovresti semplicemente ignorarlo nel file .gitignore in questo modo: Unignore sottodirectory di directory ignorate in Git


4
Questo è corretto. Stavo usando l'opzione --force per piccoli file di dati, quindi riordinato un po 'la struttura delle cartelle e ho bloccato tutti i file con tracciamento forzato. TUTTAVIA: in .gitignoreuso !specific-file-name.txtsenza la gerarchia di cartelle, in questo modo il tracciamento seguirà il file attorno al repository.
Merlin,

Dipende dallo scenario, ad es. Prima o poi si desidera escludere "1.txt" in tutte le cartelle e talvolta "cartella1 / *. Txt"
AS

15
Questa non è una soluzione "migliore". È una soluzione a un problema diverso.
aij

2

Un altro modo per ottenerlo sarebbe modificare temporaneamente il file gitignore, aggiungere il file e quindi ripristinare gitignore. Mi sento un po 'confuso


10
Sono d'accordo, questo non è quello che vuoi fare.
Merlin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.