Risposte:
Non dimenticare, secondo gitignore , che esiste un ordine di precedenza nelle diverse "fonti di pattern ignorate" che Git considera:
$GIT_DIR/info/exclude
.core.excludesfile
.Gli ultimi due possono essere una soluzione al tuo problema ma:
(Vedi anche questa domanda SO )
Le altre due soluzioni prevedono l'aggiornamento dell'indice ( git update-index
):
git update-index --assume-unchanged
: consultare " Git: non traccia un file solo nel repository locale e tenerlo nel repository remoto ". git update-index --assume-unchanged
nella directory ". --no-assume-unchange
per invertire l'effetto: vedere " È possibile git add
un file attualmente protetto da assume-unchanged
? ".Tuttavia, quando si esegue il checkout di un altro ramo o quando l'utente git pull
, quello stato "ignora" potrebbe essere ripristinato. Da qui l'altra opzione:
git update-index --skip-worktree
; vedere:
La differenza tra i due è spiegata in " Git - Differenza tra ' assume-unchanged
' e ' skip-worktree
' ".
update-index --skip-work-tree
. Ho modificato la risposta per aggiungere alcuni collegamenti alle mie vecchie risposte che illustrano quei due update-index
comandi.
Se puoi modificare .git/info/exclude
puoi inserire le stesse regole lì. Ma quel file è solo nel tuo repository locale.
.git
directory in un sottomodulo ...
.git
cartella di un sottomodulo si trova in realtà parent_repo/.git/modules/submodule_name
. Quindi modificherestiparent_repo/.git/modules/submodule_name/info/exclude
Esistono tre modi per dire a GIT quali file ignorare:
.gitignore
File$GIT_DIR/.git/info/exclude
core.excludesfile
impostazioneGli ultimi due punti potrebbero risolvere il tuo problema.
Per ulteriori informazioni, consultare gitignore (5) .
Se vuoi solo avere alcuni file locali nel repository e la posizione della sottodirectory è flessibile, puoi inserire i tuoi file tracked_dir1/tracked_dir2/untracked_dir/
e quindi aggiungere un tracked_dir1/tracked_dir2/untracked_dir/.gitignore
con contenuti come:
*
ie
$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
Sono stato in situazioni simili, quindi sto aggiungendo la mia soluzione preferita che non vedo menzionata. Il problema git update-index --assume-unchanged
in questo caso è che non è possibile farlo per un file non tracciato. Tu hai detto
Non riesco a modificare il .gitignore del mio repository.
Immagino che ciò che intendi è che non puoi inviare alcuna modifica .gitignore
all'origine. In tal caso, è possibile aggiungere il file non monitorato al proprio locale .gitignore
, quindi fare in git update-index --assume-unchanged .gitignore
modo che la modifica a .gitignore
non venga mai inviata. Ora stai ignorando il file (forse) non tracciato e non influendo sul .gitignore
file remoto .
Ignora le modifiche locali ai file tracciati:
git update-index --assume-unchanged my-file.php
Annulla le modifiche locali ai file monitorati:
git update-index --no-assume-unchanged my-file.php
fonte: git help update-index
--[no-]assume-unchanged
...
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
changed upstream, you will need to handle the situation manually.
Puoi usare il metodo globale gitignore invece di modificare quello nel progetto https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
update-index --assume-unchanged
@see stackoverflow.com/a/25253144/292408