Ajouter récursivement le dossier entier à un référentiel

250

J'essaie d'ajouter une branche à la branche principale sur GitHub et de pousser un dossier sur cette branche.

La structure de dossiers de la branche ressemble à - SocialApp / SourceCode / DevTrunk / SocialApp et tous les fichiers de code source se trouvent dans le dernier dossier.

J'utilise les commandes Git suivantes:

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

Cela pousse uniquement le premier dossier "SocialApp" sur GitHub et ignore le dossier SourceCode qui se trouve à l'intérieur du dossier. Comment puis-je réparer ça?

Ashish Agarwal
la source
4
y a-t-il des fichiers quelque part? ne sont-ils pas ignorés .gitignore?
CharlesB
This is pushing only the first folder- git ne se soucie pas du tout des dossiers, seulement des fichiers. veuillez montrer la validation - vous avez soit validé un sous-module, un lien symbolique ou autre chose qui n'est pas un dossier
AD7six
J'ai ce même problème. Je ne pense pas que ce soit un problème mais juste le comportement attendu. Étonnant, il existe de nombreuses solutions.
remarque: lorsque vos dossiers sont vides, ils ne sont pas suivis. c'est une bonne pratique d'y mettre un fichier .keep vide pour garder les répertoires vides
Mec

Réponses:

356

Vérifiez le .gitignorefichier si le sous-répertoire est ignoré.

Puis réessayez

git add --all
git commit -am "<commit message>"
git push
beyersdorfinger
la source
4
Notez que cela n'inclura pas les fichiers mentionnés dans .gitignore. J'ajoute généralement ceux-ci à la main ou j'utilise un fichier batch comme celui-ci: for /R %%f in (*.*) do git add --force %%f(voir bitbucket.org/jeroenp/besharp.net/src/tip/Scripts/GIT/… )
Jeroen Wiert Pluimers
10
Pour ajouter récursivement toute l'arborescence du dossier, la commande doit êtregit add --all :/
Jason Hartley
7
@JeroenWiertPluimers git add -f -alltravaille pour ajouter des fichiers
.gitignored
3
@JasonHartley Votre commentaire pourrait être une réponse. Merci!
ShutUpMagda
4
Cela n'ajoute-t-il pas tous les fichiers non mis en scène dans le référentiel git, pas seulement le dossier actuel? Je ne pense pas que c'est ce que la question initiale demande.
Ted
31

Cela a fonctionné pour moi:

git add . --force
ykay
la source
1
Les autres réponses nécessitent que la liste des fichiers soit calculée comme argument de la commande, celle-ci ne le fait pas, c'est donc un meilleur choix.
topkara
3
Certainement la meilleure réponse. Une modification serait de mentionner que vous n'avez pas besoin de --forcesi vous voulez que les ignorés soient toujours respectés.
GrafikRobot
31

CONFIGURATION - référentiel local sur un serveur local - le client est connecté au serveur local via LAN

git add foldername/\\*

Pour arriver au serveur ...

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

Généralement, les utilisateurs attribueront nom_serveur_distant comme origine ...

git remote add remote_server_name username@git_server_ip:/path/to/git_repo
Jake Bantug
la source
9
Échec en tant que fatal: pathspec 'foldername/\\*' did not match any files. A fonctionné comme git add foldername/\*.
Tpojka
Quelle est la différence entre git add foldername/\\*et git add --all?
Danijel
17

Les deux "git add *" et "git add SocialApp" appelés depuis le répertoire supérieur devraient ajouter récursivement tous les répertoires.

Vous n'avez probablement aucun fichier dans SocialApp / SourceCode / DevTrunk / SocialApp et c'est la raison.

Essayez d'appeler "touch SocialApp / SourceCode / DevTrunk / SocialApp / .temporary" (et cochez .gitignore), puis essayez à nouveau git add.

nopsoft
la source
2
Je ne pense pas, j'utilise git add * et j'ai le même problème.
16

Dans mon cas, il y avait un dossier .git dans le sous-répertoire car j'avais précédemment initialisé un dépôt git là-bas. Lorsque j'ai ajouté le sous-répertoire, il l'a simplement ajouté en tant que sous-projet sans ajouter aucun des fichiers contenus.

J'ai résolu le problème en supprimant le référentiel git du sous-répertoire, puis en rajoutant le dossier.

disperser
la source
Cela l'a résolu pour moi. J'ai également dû renommer le dossier lui-même pour que le correctif démarre.
Totem
6

J'ai simplement utilisé ceci:

git add app/src/release/*

Vous devez simplement spécifier le dossier à ajouter, puis utiliser *pour ajouter tout ce qui se trouve à l'intérieur de manière récursive.

Jaime Montoya
la source
5

J'ai rencontré ce problème qui m'a coûté un peu de temps, puis je me suis souvenu que git ne stockera pas les dossiers vides. N'oubliez pas que si vous avez une arborescence de dossiers que vous souhaitez stocker, placez un fichier dans au moins le dossier le plus profond de cette arborescence, quelque chose comme un fichier appelé ".gitkeep", juste pour affecter le stockage par git.

user2989397
la source
5

Si vous souhaitez ajouter un répertoire et tous les fichiers qui s'y trouvent de manière récursive, accédez au répertoire où se trouve le répertoire que vous souhaitez ajouter.

$ cd directory
$ git add directoryname
user7205168
la source
1
répertoire cd git add *
François Richard
3

J'ai également eu le même problème et je n'ai pas de fichier .gitignore. Mon problème a été résolu de la manière suivante. Cela a pris tous les sous-répertoires et fichiers.

git add <directory>/*
Suyash Jain
la source
1

Il y a des moments où je veux inclure mes codes sources de service Web avec son projet côté client. Les deux ont un référentiel git séparé. J'ai l'habitude d'ajouter tous les fichiers à l'aide de la commande:

git add -A

Mais pour une raison quelconque, il ajoute uniquement le dossier. Plus tard, j'ai découvert que les fichiers du serveur contiennent également leur .gitdossier, de sorte que la commande ne fonctionne pas.

tl; dr : assurez-vous qu'il n'y a pas de .gitdossier dans le dossier que vous souhaitez mettre en scène.

mr5
la source
1
Comment contourner ce problème si vous ne souhaitez pas supprimer les dossiers .git?
lance le
@rolls voir les sous
mr5
1

Accédez au dossier où vous avez vos fichiers
si vous êtes sur une machine Windows, vous devrez démarrer git bash à partir duquel vous obtiendrez une interface de ligne de commande, puis utilisez ces commandes

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

si vous apportez des modifications aux fichiers avant de les fusionner avec le maître, vous devez valider les modifications en exécutant

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

Après cette extraction, la branche vers la branche principale

Austine Gwa
la source
Seule réponse qui mentionneinit
Atul
1

Scénario / Solution 1:
Assurez-vous que votre Folder/ Sub-foldern'est pas dans le .gitignorefichier, par hasard.


Scénario / Solution 2:
Par défaut, git add .fonctionne récursivement.


Scénario / Solution 3:
git add --all :/ fonctionne en douceur, où git add .ne fonctionne pas (fonctionne).
(@ Commentaire de JasonHartley)


Scénario / Solution 4:
Le problème que j'ai personnellement rencontré était d'ajouterSubfolders or Files , qui était courant entre plusieurs Folders.

Par exemple:
Folder/Subfolder-L1/Subfolder-L2/...file12.txt
Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt
Folder/Subfolder-L1/...file1.txt

Il Gitme recommandait donc d'ajouter git submodulequelque chose, ce que j'ai essayé, mais c'était pénible.


Enfin, ce qui a fonctionné pour moi était:

1. git addun fichier qui se trouve à la dernière extrémité / niveau de a Folder.
Par exemple:
git add Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt

2. git add --all :/maintenant.
Il va ajouter très rapidement tous les Folders, Subfolderset files.


Nayyar
la source
-2

Cela a fonctionné pour moi

git add -f *
Amine Sehaba
la source