impossibile aggiungere la cartella in git


21

Aggiungo una nuova cartella (in realtà l'ho clonata da un altro repository e l'ho dimenticata), quindi ho apportato alcune modifiche lì. Inoltre, ho fatto molte modifiche in altri posti, quando ho provato a fare git add

# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   protected/ext/SpecificFolder (modified content)
#

Poi ricordo che forse c'era una cartella .git (perché in precedenza avevo clonato git lì). Sono andato in quella cartella e ho rimosso anche i file non necessari (cartelle) e la cartella .git. Ho controllato lo stato di git, niente di strano. Quindi eseguo il commit e il checkout in un altro ramo e improvvisamente capisco che questa cartella non è stata aggiunta all'ultimo commit. In realtà la cartella è stata aggiunta ma i file all'interno sono stati ignorati. Ora anche quando sto provando a fare git addper quella cartella non succede nulla e git statusnon mostra alcun cambiamento :(

Cosa posso fare ?


6
Nel caso in cui qualcun altro finisca su questa pagina con il problema che ho riscontrato: non sono stato in grado di aggiungere file in una sottocartella a Git. Successivamente ho scoperto che quella sottocartella aveva il suo .gitrepository e che i file venivano aggiunti a quel repository anziché al repository nella cartella principale. Anche nella GUI di Git, quella sottocartella è apparsa come file anziché come cartella.
— Nav

Risposte:


29

Git non tiene traccia delle directory; ma solo i file al loro interno.

Sembra che potresti avere un modello di ignore che addnon fa nulla. Puoi vedere i file ignorati con git status --ignored; possono quindi essere tracciati congit add --force protected/ext/SpecificFolder


1
No, non è presente git status --ignored, in qualche modo sto pensando che sia collegato al sottomodulo
— user1016265

1
Questo comando è stato un salvavita. Senza di essa, non avrei mai capito quale directory fosse ignorata.
— IgorGanapolsky,

wow ..... mi sono sentito totalmente stupido leggendo questo fatto dopo aver usato git per qualche tempo ormai ^^
— XandruCea

1
Ah, finalmente. Questo era il mio problema Avevo copiato .gitignore dal genitore e in sottomoduli. Stavo ignorando 'config /' e in seguito ho creato una directory sotto la directory di origine chiamata config. Impossibile aggiungere coraggio. Problema risolto ora grazie :-)
— Avec

7

Git non tiene traccia delle directory EMPTY. Se hai un progetto con più livelli di sottodirectory, git infatti tiene traccia delle directory con i file in essi contenuti. In caso contrario, si tratterebbe di un repository di file semplice.


Caspita, è una cosa così semplice ma dannazione. Ho letto questo e ho detto "oh mio Dio che è esattamente"
— Brian dice Reinstate Monica il

3

Mi è capitato di fare esattamente quello che ha fatto questo utente: aggiungere un repository git esistente all'interno di un altro.

Il sintomo era che git riconosceva quella directory come file e quindi non era in grado di aggiungere i file della directory.

Per risolvere questa domanda, ho eliminato la .gitcartella nella cartella, spostata quella cartella in un'altra directory, cancellato l'indice, rimosso la directory in cui nel mio repository, e quindi sono stato in grado di aggiungere correttamente la directory.

La morale di questo è: non aggiungere un repository all'interno di un altro.


5
Può anche essere risolto eseguendogit rm --cached path_to_submodule
— Victor Marchuk il


0

Prova ad aggiungere un file in quella directory.

$ git add my-dir/index.html

Se vedi un output come il seguente:

The following paths are ignored by one of your .gitignore files:
my-dir/index.html
Use -f if you really want to add them.
fatal: no files added

C'è una regola in uno dei tuoi gitignores che ti impedisce di aggiungere quella directory.


0

Ho trovato effetti collaterali simili dopo aver provato a convertire quello che era un sottomodulo in una sottocartella normale.

Ri-aggiungere la cartella che stavo tentando di convertire sembrava funzionare, ma si scopre che i file al suo interno non sono stati effettivamente aggiunti.

Cercare di aggiungere un file al suo interno mi ha dato un avvertimento migliore

git add sites/all/modules/contrib/transclusion/transclusion.module 
fatal: Pathspec 'sites/all/modules/contrib/transclusion/transclusion.module' is in submodule 'sites/all/modules/contrib/transclusion'
  • quindi era correlato al modo in cui avevo tentato manualmente di rimuovere il vecchio sottomodulo, in quanto non esisteva un processo ben documentato per farlo correttamente. - L'ho appena eliminato da .gitmodules. Altre cose erano effettivamente necessarie per erizzare le ombre del sottomodulo.
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.