Aggiungi ricorsivamente l'intera cartella a un repository


250

Sto cercando di aggiungere un ramo al ramo principale su GitHub e spingere una cartella su quel ramo.

La struttura delle cartelle del ramo appare come: SocialApp / SourceCode / DevTrunk / SocialApp e tutti i file del codice sorgente si trovano nell'ultima cartella.

Sto usando i seguenti comandi Git:

git add *
git commit -m with the message
git push

Questo sta spingendo solo la prima cartella "SocialApp" su GitHub e ignorando la cartella SourceCode che si trova all'interno della cartella. Come posso risolvere questo problema?


4
ci sono file da qualche parte? non vengono ignorati .gitignore?
Charles B

This is pushing only the first folder- git non si preoccupa affatto delle cartelle, solo dei file. mostra il commit - hai eseguito il commit di un sottomodulo, un link simbolico o qualcos'altro che non è una cartella
AD7six

Sto avendo questo stesso problema. Non penso che questo sia un problema, ma solo il comportamento previsto. Sorprendente ci sono così tante soluzioni.

nota: quando le tue cartelle sono vuote non vengono tracciate. è buona norma inserire un file .keep vuoto per mantenere le directory vuote
Amico,

Risposte:


356

Controllare il .gitignorefile, se la sottodirectory viene ignorata.

Quindi riprovare

git add --all
git commit -am "<commit message>"
git push

4
Nota che questo non includerà i file menzionati in .gitignore. Di solito li aggiungo a mano o utilizzo un file batch come questo: for /R %%f in (*.*) do git add --force %%f(vedi bitbucket.org/jeroenp/besharp.net/src/tip/Scripts/GIT/… )
Jeroen Wiert Pluimers,

10
Per aggiungere ricorsivamente l'intera struttura ad albero della cartella, il comando dovrebbe esseregit add --all :/
Jason Hartley,

7
@JeroenWiertPluimers git add -f -alllavora per aggiungere file
.gitignored

3
@JasonHartley Il tuo commento potrebbe essere una risposta. Grazie!
ShutUpMagda,

4
Questo non aggiunge tutti i file non messi in scena nel repository git, non solo la cartella corrente? Non credo sia la domanda originale.
Ted

31

Questo ha funzionato per me:

git add . --force

1
Le altre risposte richiedono che l'elenco dei file sia calcolato come argomento del comando, questo no, quindi è una scelta migliore.
Topkara,

3
Sicuramente la risposta migliore .. Una modifica sarebbe quella di menzionare che non è necessario il --forcese si desidera che gli ignoranti siano ancora rispettati.
GrafikRobot,

31

SETUP - repository locale su un server locale - il client è connesso al server locale tramite LAN

git add foldername/\\*

Per arrivare al server ...

git commit -m "comments..."
git push remote_server_name master

Principalmente, gli utenti assegneranno remote_server_name come origine ...

git remote add remote_server_name username@git_server_ip:/path/to/git_repo

9
Non riuscito come fatal: pathspec 'foldername/\\*' did not match any files. Ha lavorato come git add foldername/\*.
Tpojka,

Qual è la differenza tra git add foldername/\\*e git add --all?
Danijel,

17

Sia "git add *" che "git add SocialApp" chiamati dalla directory principale dovrebbero aggiungere ricorsivamente tutte le directory.

Probabilmente non hai file in SocialApp / SourceCode / DevTrunk / SocialApp e questo è il motivo.

Prova a chiamare "tocca SocialApp / SourceCode / DevTrunk / SocialApp / .temporary" (e controlla .gitignore) e quindi prova ad aggiungere di nuovo.


2
Non credo, utilizzo git add * e sto riscontrando lo stesso problema.

16

Nel mio caso, c'era una cartella .git nella sottodirectory perché avevo precedentemente inizializzato un repository git lì. Quando ho aggiunto la sottodirectory, è stata semplicemente aggiunta come sottoprogetto senza aggiungere alcun file contenuto.

Ho risolto il problema rimuovendo il repository git dalla sottodirectory e quindi aggiungendo nuovamente la cartella.


Questo mi ha risolto. Ho anche dovuto rinominare la cartella stessa per dare il via alla correzione.
Totem

6

Ho semplicemente usato questo:

git add app/src/release/*

Devi semplicemente specificare la cartella da aggiungere e quindi utilizzare *per aggiungere tutto ciò che è ricorsivamente all'interno.


5

Ho riscontrato questo problema che mi è costato un po 'di tempo, poi ho ricordato che git non memorizzerà le cartelle vuote. Ricorda che se hai un albero delle cartelle che vuoi archiviare, metti un file almeno nella cartella più profonda di quell'albero, qualcosa come un file chiamato ".gitkeep", solo per influenzare la memorizzazione di git.


5

Se si desidera aggiungere una directory e tutti i file che si trovano al suo interno in modo ricorsivo, passare alla directory in cui si trova la directory che si desidera aggiungere.

$ cd directory
$ git add directoryname

1
directory cd git add *
François Richard

3

Ho avuto anche lo stesso problema e non ho il file .gitignore. Il mio problema è stato risolto nel modo seguente. Ciò ha richiesto tutte le sottodirectory e i file.

git add <directory>/*

1

Ci sono volte in cui voglio includere i miei codici sorgente del servizio web insieme al suo progetto lato client. Entrambi hanno un repository git separato. Sono effettivamente utilizzato per aggiungere tutti i file utilizzando il comando:

git add -A

Ma per qualche motivo, aggiunge solo la cartella. Più tardi ho scoperto che anche i file del server hanno i suoi.git cartella, quindi il comando non funziona.

tl; dr : assicurati che non ci siano .gitcartelle all'interno della cartella che vuoi mettere in scena.


1
Come aggirare questo problema se non si desidera rimuovere le cartelle .git?
lancia il

@rolls see git submodules
mr5

1

Passa alla cartella in cui hai i tuoi file
se ti trovi su un computer Windows dovrai avviare git bash da cui otterrai un'interfaccia a riga di comando quindi utilizzare questi comandi

git init   //this initializes a .git  repository in your working directory

git remote add origin <URL_TO_YOUR_REPO.git> // this points to correct repository where files will be uploaded

git add *   // this adds all the files to the initialialized git repository

se si apportano modifiche ai file prima di unirli al master, è necessario eseguire il commit delle modifiche eseguendo

git commit -m "applied some changes to the branch"

Dopo questo checkout il ramo al ramo principale


Rispondi solo a questa menzioneinit
Atul, il

1

Scenario / Soluzione 1:
Assicurati che Folder/ Sub-foldernon sia presente nel .gitignorefile, per caso.


Scenario / Soluzione 2:
per impostazione predefinita, git add .funziona in modo ricorsivo.


Scenario / Soluzione 3:
git add --all :/ funziona senza intoppi, dove git add .non funziona (funziona).
(Commento di JasonHartley)


Scenario / Soluzione 4:
Il problema che ho affrontato personalmente è stato l'aggiunta Subfolders or Files, che erano comuni tra piùFolders .

Per esempio:
Folder/Subfolder-L1/Subfolder-L2/...file12.txt
Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt
Folder/Subfolder-L1/...file1.txt

Quindi Gitmi stava raccomandando di aggiungere git submodule, cosa che ho provato ma è stata una seccatura.


Alla fine quello che ha funzionato per me è stato:

1. git addun file che si trova all'ultima estremità / livello di a Folder.
Ad esempio:
git add Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt

2. git add --all :/ora.
Sarà molto rapidamente aggiungere tutti i Folders, Subfolderse files.



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.