Ho aggiunto la seguente riga a .gitignore
:
sites/default/settings.php
ma quando git status
scrivo mostra il file come file non in scena.
Qual è il problema? Tutti gli altri schemi funzionano bene.
Ho aggiunto la seguente riga a .gitignore
:
sites/default/settings.php
ma quando git status
scrivo mostra il file come file non in scena.
Qual è il problema? Tutti gli altri schemi funzionano bene.
Risposte:
Assicurati che il tuo .gitignore
sia nella radice della directory di lavoro, e in quella directory esegui git status
e copia il percorso nel file dall'output di stato e incollalo nel file .gitignore
.
Se non funziona, è probabile che il tuo file sia già tracciato da Git. È possibile confermare ciò tramite l'output di git status
. Se il file non è elencato nella sezione "File non tracciati " , allora è già tracciato da Git e ignorerà la regola dal .gitignore
file.
Il motivo per ignorare i file in Git è che non verranno aggiunti al repository. Se in precedenza hai aggiunto un file che desideri ignorare, verrà tracciato da Git e le regole di ignoramento corrispondenti verranno ignorate. Git lo fa poiché il file fa già parte del repository.
Per ignorare effettivamente il file, è necessario non tracciarlo e rimuoverlo dal repository. Puoi farlo usando git rm --cached sites/default/settings.php
. Questo rimuove il file dal repository senza eliminare fisicamente il file (ecco cosa --cached
fa). Dopo aver eseguito il commit di tale modifica, il file verrà rimosso dal repository e, ignorandolo, dovrebbe funzionare correttamente.
.git
si trova la directory e che è essa stessa la radice del repository. Come quando cloni un repository, /xy/
allora /xy/
è la tua directory di lavoro con /xy/.git/
dentro.
git add .
secondo git rm --cached
per ricostruire correttamente l'indice.
Mi imbatto in questa, è una vecchia domanda, ma voglio che il file venga tracciato ma non rintracciarlo su determinate copie funzionanti, per farlo puoi eseguire
git update-index --assume-unchanged sites/default/settings.php
.gitignore ignorerà solo i file che non hai già aggiunto al tuo repository.
Se l'hai fatto git add .
, e il file è stato aggiunto all'indice, .gitignore non ti aiuterà. Dovrai farlo git rm sites/default/settings.php
per rimuoverlo, quindi verrà ignorato.
git rm
dovrebbe farlo, ma potrebbe chiederti di usare l'opzione -f che lo rimuoverà dalla directory di lavoro. Non ho capito altro oltre a fare una copia del file, fare git rm -f
e quindi ripristinare la copia.
Si prega di utilizzare questo comando
git rm -rf --cached .
git add .
A volte i file .gitignore non funzionano anche se sono corretti. Il motivo per cui Git ignora i file è che non vengono aggiunti al repository. Se hai aggiunto un file che desideri ignorare in precedenza, verrà tracciato da Git e le regole di abbinamento saltate verranno ignorate. Git lo fa perché il file fa già parte del repository.
Ho avuto lo stesso problema. File definiti in .gitingore
cui elencati come file non tracciati durante l'esecuzione git status
.
Il motivo è stato che il .gitignore
file è stato salvato nella UTF-16LE
codifica e non nella UTF8
codifica.
Dopo aver modificato la codifica del .gitignore
file in UTF8
ha funzionato per me.
Cosa ho fatto per ignorare correttamente il file settings.php :
Penso che se c'è il file di commit su Git, ignora non funziona come previsto. Elimina semplicemente il file e esegui il commit. Successivamente ignorerà.
Ci sono esempi, ad esempio, i file di configurazione dell'applicazione, che voglio tracciare in git (quindi .gitignore non funzionerà), ma che devo modificare per le impostazioni locali. Non voglio che Git gestisca questi file o li mostri come modificati. Per fare ciò uso skip-worktree:
git update-index --skip-worktree path/to/file
Puoi confermare che i file vengono saltati elencando i file e controllando le righe che iniziano con S per saltare
git ls-files -v | grep ^S
Se in futuro vuoi che git gestisca nuovamente il file localmente, esegui semplicemente:
git update-index --no-skip-worktree path/to/file
Mescalito sopra ha avuto un'ottima risposta, ma mi ha portato sulla buona strada
git update-index --assume-file invariato / to / ignore.php
Ha un contratto con git quello in cui: l'utente promette di non modificare il file e consente a Git di supporre che il file dell'albero di lavoro corrisponda a ciò che è registrato nell'indice.
Tuttavia, cambio il contenuto dei file, quindi nel mio caso --skip-worktree è l'opzione migliore.
Il sito Web di Toshiharu Nishina ha fornito un'eccellente spiegazione di skip-worktree vs assume-immutato: ignora i file già gestiti con Git localmente
Un altro possibile motivo : alcune istanze di client git in esecuzione contemporaneamente . Ad esempio "git shell" + "GitHub Desktop", ecc.
Questo mi è successo, stavo usando "GitHub Desktop" come client principale e ignoravo alcune nuove impostazioni .gitignore: commit dopo commit:
Motivo : l'editor di codice di Visual Studio era in esecuzione in background con lo stesso repository aperto. VS Code ha il controllo git incorporato e questo crea alcuni conflitti.
Soluzione : ricontrolla più client git nascosti e usa solo un client git alla volta, specialmente mentre cancelli la cache git.
Assicurati che .gitignore non abbia un'estensione !! Non può essere .gitignore.txt, in Windows basta nominare il file .gitignore. e funzionerà.
Ho appena provato questo con git 1.7.3.1 e ho dato una struttura come:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
dove repo
è quindi la "radice" di cui sopra (la definirei la radice del tuo albero di lavoro) e .gitignore
contiene solo sites/default/settings.php
, l'ignore funziona per me (e non importa se .gitignore
viene aggiunto al repository o meno). Questo corrisponde al layout del repository? In caso contrario, cosa differisce?
Nel caso in cui qualcuno in futuro abbia lo stesso problema che ho fatto:
Se si utilizza il
*
!/**/
!*.*
trucco per rimuovere i file binari senza estensione, assicurarsi che TUTTE le altre linee gitignore siano SOTTO. Git leggerà da .gitignore dall'alto, quindi anche se avevo "test.go" nel mio gitignore, era il primo nel file e divenne "non firmato" dopo
!*.*
Ho provato la maggior parte dei comandi sopra sul terminale VS Code e ho ricevuto errori come:
fatal: pathspec '[dir]/[file]' did not match any files
Ho aperto il progetto su GitHub Desktop e da lì ho ignorato e ha funzionato.