Comment puis-je ajouter un répertoire vide (qui ne contient aucun fichier) à un référentiel Git?
Un autre moyen de créer un répertoire (presque) vide (dans le référentiel) consiste à créer un fichier .gitignore
à l'intérieur de ce répertoire contenant les quatre lignes suivantes:
# Ignore everything in this directory
*
# Except this file
!.gitignore
Ensuite, vous ne devez pas obtenir l'ordre correctement comme vous devez le faire dans m104 solution .
Cela donne également l’avantage que les fichiers de ce répertoire ne seront pas affichés comme "non suivis" lorsque vous ferez un statut git.
Rendre le commentaire de @ GreenAsJade persistant:
Je pense que cela vaut la peine de noter que cette solution répond précisément à la question posée, mais n’est peut-être pas ce que beaucoup de personnes qui auront consulté cette question auront cherché. Cette solution garantit que le répertoire reste vide. Il dit "Je ne veux vraiment jamais que les fichiers soient archivés ici". Contrairement à "je n'ai pas encore de fichiers à archiver ici, mais j'ai besoin du répertoire ici, les fichiers risquent de revenir plus tard".
Tu ne peux pas. Voir le Git FAQ .
Actuellement, la conception de l'index git (zone intermédiaire) ne permet que la liste des fichiers et aucune personne suffisamment compétente pour effectuer la modification permettant aux répertoires vides de se soucier suffisamment de cette situation pour y remédier.
Les répertoires sont ajoutés automatiquement lors de l'ajout de fichiers. C'est-à-dire que les répertoires ne doivent jamais être ajoutés au référentiel et qu'ils ne font pas l'objet d'un suivi.
Vous pouvez dire "
git add <dir>
" et il y ajoutera des fichiers.Si vous avez vraiment besoin d'un répertoire pour exister dans les caisses, créez-y un fichier. .gitignore fonctionne bien à cette fin; vous pouvez le laisser vide ou indiquer le nom des fichiers que vous souhaitez afficher dans le répertoire.
Créez un fichier vide appelé .gitkeep
dans le répertoire et ajoutez-le.
Vous pouvez toujours mettre un fichier README dans le répertoire avec une explication de la raison pour laquelle vous souhaitez créer ce répertoire, sinon vide, dans le référentiel.
touch .keep
Sous Linux, cela crée un fichier vide nommé .keep
. Ce nom est préféré à .gitkeep
car le premier est agnostique par rapport à Git, alors que le dernier est spécifique à Git. Deuxièmement, comme un autre utilisateur l’a noté, la convention de préfixe .git
devrait être réservée aux fichiers et aux répertoires utilisés par Git.
Alternativement, comme indiqué dans une autre réponse , le répertoire peut contenir un descriptif README
ou README.md
fichier à la place.
Bien entendu, cela nécessite que la présence du fichier ne provoque pas la rupture de votre application.
Tout d'abord:
Un répertoire vide ne peut pas faire partie d'un arbre sous le système de gestion de versions Git .
Cela ne sera tout simplement pas suivi. Mais il existe des scénarios dans lesquels le "versionnement" des répertoires vides peut avoir un sens, par exemple:
cache/
ou logs/
, où nous voulons fournir le dossier mais .gitignore
son contenuDe nombreux utilisateurs suggèrent:
README
ou un autre fichier avec du contenu afin de rendre le répertoire non vide, ou.gitignore
avec une sorte de "logique inverse" (c’est-à-dire pour inclure tous les fichiers) qui, à la fin, remplit le même objectif de la démarche n ° 1.Bien que , les deux solutions fonctionnent sûrement je les trouve incompatibles avec une approche significative de la gestion des versions Git.
.gitignore
pour faire quelque chose ( conservant fichiers) qui est tout le contraire de ce que cela signifie ( excluant fichiers), même si c'est possible?Utilisez un fichier empty appelé .gitkeep
afin de forcer la présence du dossier dans le système de gestion des versions.
Bien que cela ne semble pas être une si grande différence:
Vous utilisez un fichier qui a pour but single de conserver le dossier. Vous n'y mettez aucune information que vous ne voulez pas mettre.
Par exemple, vous devriez utiliser les fichiers README comme des informations utiles, pas comme une excuse pour conserver le dossier.
La séparation des problèmes est toujours une bonne chose et vous pouvez toujours ajouter un .gitignore
pour ignorer les fichiers indésirables.
Le nommer .gitkeep
le rend très clair et direct à partir du nom de fichier lui-même (et aussi à d’autres développeurs , ce qui est bon pour un projet partagé et l’un des objectifs principaux de un référentiel Git) que ce fichier est
J'ai vu l'approche .gitkeep
adoptée par des cadres très importants comme Laravel , Angular-CLI .
Comme décrit dans d'autres réponses, Git est incapable de représenter des répertoires vides dans sa zone d'activation. (Voir Git FAQ .) Cependant, si, pour vos besoins, un répertoire est suffisamment vide s'il contient uniquement un fichier .gitignore
, vous pouvez créer des fichiers .gitignore
dans Répertoires vides uniquement via:
find . -type d -empty -exec touch {}/.gitignore \;
Andy Lester a raison, mais si votre répertoire doit simplement être vide, et non vide vide, vous pouvez placer un fichier .gitignore
vide comme solution de contournement.
Soit dit en passant, il s’agit d’un problème de mise en œuvre, et non d’un problème fondamental de conception du stockage Git. Comme cela a été mentionné à maintes reprises sur la liste de diffusion Git, la raison pour laquelle cela n’a pas été implémenté est que personne ne s’y est soucié assez de soumettre un correctif, pas que cela ne pourrait ou ne devrait pas être fait.
La manière de créer un dossier de journal Ruby on Rails :
mkdir log && touch log/.gitkeep && git add log/.gitkeep
Maintenant, le répertoire des journaux sera inclus dans l'arborescence. Il est extrêmement utile lors du déploiement, vous n’aurez donc pas à écrire de routine pour créer des répertoires de journal.
Les fichiers journaux peuvent être conservés en émettant,
echo log/dev.log >> .gitignore
mais vous le saviez probablement.
Git ne suit pas les répertoires vides. Voir le Git FAQ pour plus d'explications. La solution suggérée consiste à placer un fichier .gitignore
dans le répertoire vide. Je n'aime pas cette solution car le .gitignore
est "caché" par la convention Unix. De plus, il n'y a pas d'explication pour laquelle les répertoires sont vides.
Je suggère de mettre un fichier README dans le répertoire vide pour expliquer pourquoi le répertoire est vide et pourquoi il doit être suivi dans Git. Avec le fichier README en place, le répertoire n'est plus vide pour Git.
La vraie question est pourquoi avez-vous besoin du répertoire vide dans git? Habituellement, vous avez une sorte de script de construction capable de créer le répertoire vide avant la compilation/l'exécution. Sinon, faites-en un. C'est une bien meilleure solution que de mettre des répertoires vides dans git.
Vous avez donc une raison pour laquelle vous avez besoin d’un répertoire vide dans git. Mettez cette raison dans le fichier README. De cette façon, les autres développeurs (et vous-même, à l'avenir) savent pourquoi le répertoire vide doit être présent. Vous saurez également que vous pouvez supprimer le répertoire vide lorsque le problème nécessitant le répertoire vide a été résolu.
Pour lister chaque répertoire vide, utilisez la commande suivante:
find -name .git -Prune -o -type d -empty -print
Pour créer des fichiers README réservés dans chaque répertoire vide:
find -name .git -Prune -o -type d -empty -exec sh -c \
"echo this directory needs to be empty because reasons > {}/README.emptydir" \;
Pour ignorer tout le répertoire sauf le fichier README, placez les lignes suivantes dans votre .gitignore
:
path/to/emptydir/*
!path/to/emptydir/README.emptydir
path/to/otheremptydir/*
!path/to/otheremptydir/README.emptydir
Sinon, vous pouvez simplement exclure tous les fichiers README:
path/to/emptydir/*
path/to/otheremptydir/*
!README.emptydir
Pour lister tous les README après leur création:
find -name README.emptydir
AVERTISSEMENT: cette modification ne fonctionne pas vraiment. Désolé pour le désagrément.
Message original ci-dessous:
J'ai trouvé une solution en jouant avec les internes de Git!
Créez votre répertoire vide:
$ mkdir path/to/empty-folder
Ajoutez-le à l'index en utilisant une commande de plomberie et l'arbre vide SHA-1 :
$ git update-index --index-info
040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 path/to/empty-folder
Tapez la commande puis entrez la deuxième ligne. presse Enter puis Ctrl + D mettre fin à votre saisie. Remarque: le format est mode [ESPACE] type [ESPACE] SHA-1hash [ TAB] chemin (l'onglet est important, le formatage de la réponse ne le conserve pas).
C'est ça! Votre dossier vide est dans votre index. Tout ce que vous avez à faire est de vous engager.
Cette solution est courte et fonctionne apparemment bien ( voir l'EDIT! ), mais ce n'est pas si facile à retenir ...
L'arborescence vide SHA-1 peut être trouvée en créant un nouveau référentiel Git vide, cd
dans celui-ci et en émettant git write-tree
, qui génère l'arborescence vide SHA-1.
EDIT:
J'utilise cette solution depuis que je l'ai trouvée. Cela semble fonctionner exactement de la même manière que pour créer un sous-module, sauf qu'aucun module n'est défini nulle part. Cela entraîne des erreurs lors de l’émission de git submodule init|update
. Le problème est que git update-index
réécrit la partie 040000 tree
en 160000 commit
.
De plus, aucun fichier placé sous ce chemin ne sera jamais remarqué par Git, car il pense appartenir à un autre référentiel. C'est méchant car il peut facilement être négligé!
Cependant, si vous n'utilisez déjà (et n'utiliserez pas) de sous-modules Git dans votre référentiel, et que le dossier "vide" restera vide ou si vous souhaitez que Git connaisse son existence et ignore son contenu, vous pouvez utiliser: ce Tweak. Aller de la manière habituelle avec les sous-modules prend plus de pas que ce Tweak.
Ajouter un répertoire vide semble être le chemin de moindre résistance car vous avez des scripts qui supposent que ce répertoire existe (peut-être parce qu'il s'agit d'une cible). pour les binaires générés). Une autre approche serait de modifiez vos scripts pour créer le répertoire selon vos besoins.
mkdir --parents .generated/bin ## create a folder for storing generated binaries
mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed
Dans cet exemple, vous pouvez insérer un lien symbolique (brisé) dans le répertoire afin de pouvoir y accéder sans le préfixe ".generated" (mais ceci est facultatif).
ln -sf .generated/bin bin
git add bin
Lorsque vous souhaitez nettoyer votre arbre source, vous pouvez simplement:
rm -rf .generated ## this should be in a "clean" script or in a makefile
Si vous adoptez l'approche souvent suggérée consistant à archiver un dossier presque vide, vous aurez la complexité mineure de supprimer le contenu sans supprimer également le fichier ".gitignore".
Vous pouvez ignorer tous vos fichiers générés en ajoutant ce qui suit à votre racine .gitignore:
.generated
Supposons qu'il vous faut un répertoire vide nommé tmp:
$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp
En d'autres termes, vous devez ajouter le fichier .gitignore à l'index avant de pouvoir dire à Git de l'ignorer (et tout le reste dans le répertoire vide).
J'ai été confronté au problème avec les répertoires vides, aussi. Le problème avec l'utilisation de fichiers d'espaces réservés est que vous devez les créer et les supprimer s'ils ne sont plus nécessaires (car plus tard, des sous-répertoires ou des fichiers ont été ajoutés. Avec de grandes arborescences source, la gestion de ces fichiers d'espaces réservés peut être fastidieuse et erronée. enclin.
C'est pourquoi j'ai décidé d'écrire un outil open source permettant de gérer automatiquement la création/suppression de tels fichiers de substitution. Il est écrit pour la plate-forme .NET et fonctionne sous Mono (.NET pour Linux) et Windows.
Il suffit de regarder: http://code.google.com/p/markemptydirs
J'aime les réponses de @ Artur79 et @mjs. J'ai donc utilisé une combinaison des deux et en ai fait un standard pour nos projets.
find . -type d -empty -exec touch {}/.gitkeep \;
Cependant, seuls quelques développeurs travaillent sur Mac ou Linux. Beaucoup de travail sur Windows et je ne pouvais pas trouver un équivalent simple one-liner pour y parvenir. Certains ont eu la chance d’avoir installé Cygwin pour d’autres raisons, mais prescrire Cygwin pour cette raison semblait exagéré.
Modifier pour une meilleure solution
Donc, comme la plupart de nos développeurs ont déjà installé Ant , la première chose à laquelle j'ai pensé était de constituer un fichier de construction Ant pour le faire indépendamment de la plate-forme. Cela peut encore être trouvé ici
Cependant , j'ai pensé plus tard qu'il serait préférable d'en faire une petite commande d'utilitaire. Je l'ai donc recréé avec Python et publié. au PyPI ici . Vous pouvez l'installer en exécutant simplement:
pip3 install gitkeep2
Cela vous permettra de créer et de supprimer des fichiers .gitkeep
de manière récursive, ainsi que de leur ajouter des messages pour que vos pairs puissent comprendre pourquoi ces répertoires sont importants. Ce dernier bit est un bonus. Je pensais que ce serait bien si les fichiers .gitkeep
pouvaient s'auto-documenter.
$ gitkeep --help
Usage: gitkeep [OPTIONS] PATH
Add a .gitkeep file to a directory in order to Push them into a Git repo
even if they're empty.
Read more about why this is necessary at: https://git.wiki.kernel.org/inde
x.php/Git_FAQ#Can_I_add_empty_directories.3F
Options:
-r, --recursive Add or remove the .gitkeep files recursively for all
sub-directories in the specified path.
-l, --let-go Remove the .gitkeep files from the specified path.
-e, --empty Create empty .gitkeep files. This will ignore any
message provided
-m, --message TEXT A message to be included in the .gitkeep file, ideally
used to explain why it's important to Push the specified
directory to source control even if it's empty.
-v, --verbose Print out everything.
--help Show this message and exit.
J'espère que tu trouves cela utile.
Vous ne pouvez pas et ne pourrez jamais, malheureusement. C'est une décision prise par Linus Torvald lui-même. Il sait ce qui est bon pour nous.
Il y a un coup de gueule quelque part que j'ai lu une fois.
J'ai trouvé Re: répertoires vides .., mais peut-être il y en a un autre.
Vous devez vivre avec les solutions de contournement ... malheureusement.
Lorsque vous ajoutez un fichier .gitignore
, si vous voulez y mettre une quantité de contenu (que vous voulez que Git ignore), vous pouvez ajouter une seule ligne avec juste un astérisque *
pour créer Assurez-vous de ne pas ajouter accidentellement le contenu ignoré.
La solution de Jamie Flournoy fonctionne très bien. Voici une version un peu améliorée pour garder le .htaccess
:
# Ignore everything in this directory
*
# Except this file
!.gitignore
!.htaccess
Avec cette solution, vous pouvez valider un dossier vide, par exemple /log
, /tmp
ou /cache
et le dossier restera vide.
Comme mentionné, il n'est pas possible d'ajouter des répertoires vides, mais voici une ligne qui ajoute des fichiers .gitignore vides à tous les répertoires.
Ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'
J'ai collé ceci dans un Rakefile pour un accès facile.
Voici un hack, mais c'est marrant que ça marche (Git 2.2.1). Semblable à ce que @Teka a suggéré, mais plus facile à retenir:
git submodule add path_to_repo
).submodules
. Commettre un changement..submodules
et validez la modification.Vous avez maintenant un répertoire créé lorsque la validation est extraite. Une chose intéressante est que si vous regardez le contenu de l'objet tree de ce fichier, vous obtiendrez:
fatal: le nom de l'objet n'est pas valide
Je n'encouragerais cependant pas à l'utiliser car cela pourrait cesser de fonctionner dans les futures versions de Git. Ce qui peut laisser votre référentiel corrompu.
Il n’existe aucun moyen de faire en sorte que Git assure le suivi des répertoires. La seule solution consiste donc à ajouter un fichier d’espace réservé dans le répertoire que Git doit suivre.
Le fichier peut être nommé et contenir tout ce que vous voulez, mais la plupart des gens utilisent un fichier vide nommé .gitkeep
(bien que certaines personnes préfèrent le _ (VCS-agnostic .keep
).
Le préfixe .
le marque comme un fichier caché.
Une autre idée serait d’ajouter un fichier README
expliquant l’utilisation du répertoire.
Je crée toujours une fonction pour vérifier la structure de dossiers souhaitée et la construire pour moi dans le projet. Cela résout ce problème car les dossiers vides sont conservés dans Git par proxy.
function check_page_custom_folder_structure () {
if (!is_dir(TEMPLATEPATH."/page-customs"))
mkdir(TEMPLATEPATH."/page-customs");
if (!is_dir(TEMPLATEPATH."/page-customs/css"))
mkdir(TEMPLATEPATH."/page-customs/css");
if (!is_dir(TEMPLATEPATH."/page-customs/js"))
mkdir(TEMPLATEPATH."/page-customs/js");
}
Ceci est en PHP, mais je suis sûr que la plupart des langues supportent les mêmes fonctionnalités, et comme la création des dossiers est prise en charge par l'application, les dossiers seront toujours présents.
Si vous voulez ajouter un dossier qui contiendra beaucoup de données transitoires dans plusieurs répertoires sémantiques, une approche consiste à ajouter quelque chose comme ceci à votre racine .gitignore ...
/app/data/**/*.* !/app/data/**/*.md
Ensuite, vous pouvez valider des fichiers README.md descriptifs (ou des fichiers vierges, peu importe, dans la mesure où vous pouvez les cibler de manière unique, comme avec *.md
dans ce cas) dans chaque répertoire pour vous assurer que tous les répertoires restent partie du repo mais les fichiers (avec les extensions) sont conservés ignorés. LIMITATION: .
'ne sont pas autorisés dans les noms de répertoire!
Vous pouvez remplir tous ces répertoires avec des fichiers xml/images ou autre et ajouter d'autres répertoires sous /app/data/
au fil du temps, à mesure que le stockage de votre application évoluera (avec les fichiers README.md servant à graver une description de ce que vous voulez. chaque répertoire de stockage est pour exactement).
Il n'est pas nécessaire de modifier davantage votre .gitignore
ou de le décentraliser en créant un nouveau .gitignore
pour chaque nouveau répertoire. Ce n’est probablement pas la solution la plus intelligente, mais plutôt concise, elle fonctionne toujours pour moi. Sympa et simple! ;)
Tu ne peux pas. Ceci est une décision de conception intentionnelle prise par les responsables de Git. Fondamentalement, le but d’un système de gestion de code source comme Git est de gérer le code source et les répertoires vides ne sont pas du code source. Git est aussi souvent décrit comme un suivi de contenu, et encore une fois, les répertoires vides ne sont pas des contenus (bien au contraire, en fait), ils ne sont donc pas suivis.
Ajout d'une option supplémentaire à la mêlée.
En supposant que vous souhaitiez ajouter un répertoire à git
qui, pour toutes les raisons liées à git
, doit rester vide et que son contenu ne soit jamais suivi, un .gitignore
comme suggéré à maintes reprises, faire l'affaire.
Le format, comme mentionné, est:
*
!.gitignore
Maintenant, si vous voulez un moyen de faire cela en ligne de commande, en un seul coup, alors que à l'intérieur le répertoire que vous voulez ajouter, vous pouvez exécuter:
$ echo "*" > .gitignore && echo '!.gitignore' >> .gitignore && git add .gitignore
Moi-même, j'ai un script Shell que j'utilise pour faire cela. Nommez le script comme vous le souhaitez et ajoutez-le quelque part dans votre chemin d'inclusion ou faites-le directement référence:
#!/bin/bash
dir=''
if [ "$1" != "" ]; then
dir="$1/"
fi
echo "*" > $dir.gitignore && \
echo '!.gitignore' >> $dir.gitignore && \
git add $dir.gitignore
Avec cela, vous pouvez soit l'exécuter à partir du répertoire que vous souhaitez ajouter, soit référencer le répertoire en tant que premier et unique paramètre:
$ ignore_dir ./some/directory
Une autre option (en réponse à un commentaire de @GreenAsJade), si vous souhaitez suivre un dossier vide qui MAY contient des fichiers suivis à l'avenir, mais restera vide pour l'instant, vous pouvez omettre la *
à partir du fichier .gitignore
et vérifiez that in. En gros, tout le fichier dit est "n'ignore pas moi", mais sinon , le répertoire est vide et suivi.
Votre fichier .gitignore
ressemblerait à ceci:
!.gitignore
Voilà, vérifiez-le, et vous avez un répertoire vide, mais non suivi, dans lequel vous pourrez suivre les fichiers ultérieurement.
La raison pour laquelle je suggère de garder cette ligne dans le fichier est qu’elle donne le but .gitignore
. Sinon, certains pourraient penser à l'enlever. Cela peut aider si vous placez un commentaire au-dessus de la ligne.
Parfois, vous devez gérer des bibliothèques ou des logiciels mal écrits, qui nécessitent un "vrai" répertoire vide et existant. Mettre un simple .gitignore
ou .keep
pourrait les casser et causer un bogue. Ce qui suit pourrait aider dans ces cas, mais aucune garantie ...
Commencez par créer le répertoire nécessaire:
mkdir empty
Ensuite, vous ajoutez un lien symbolique brisé à ce répertoire (mais dans tous les cas autres que le cas d'utilisation décrit ci-dessus, veuillez utiliser un README
avec une explication):
ln -s .this.directory empty/.keep
Pour ignorer les fichiers de ce répertoire, vous pouvez les ajouter à la racine .gitignore
:
echo "/empty" >> .gitignore
Pour ajouter le fichier ignoré, utilisez un paramètre pour le forcer:
git add -f empty/.keep
Après la validation, vous avez un lien symbolique cassé dans votre index et git crée le répertoire. Le lien brisé présente certains avantages, car il ne s'agit pas d'un fichier normal et ne pointe vers aucun fichier normal. Donc, cela correspond même à la partie de la question "(qui ne contient aucun fichier)", non pas par l'intention mais par le sens, je suppose:
find empty -type f
Cette commande affiche un résultat vide, car aucun fichier n'est présent dans ce répertoire. Ainsi, la plupart des applications, qui obtiennent tous les fichiers d'un répertoire, ne voient généralement pas ce lien, du moins si un fichier "existe" ou un fichier "est lisible". Même certains scripts n'y trouveront aucun fichier:
$ php -r "var_export(glob('empty/.*'));"
array (
0 => 'empty/.',
1 => 'empty/..',
)
Mais je recommande fortement d’utiliser cette solution uniquement dans des circonstances spéciales, un bon README
écrit dans un répertoire vide est généralement une meilleure solution. (Et je ne sais pas si cela fonctionne avec un système de fichiers Windows ...)
Pour ce faire, ajoutez un fichier .gitkeep
au répertoire que vous souhaitez conserver (actuellement) vide.
Voir ceci réponse SOF pour plus d'informations - ce qui explique également pourquoi certaines personnes trouvent la convention en concurrence d'ajouter un fichier .gitignore (comme indiqué dans de nombreuses réponses ici) déroutante.
Parfois, j'ai des référentiels avec des dossiers qui ne contiendront jamais que des fichiers considérés comme du "contenu" - en d'autres termes, ce ne sont pas des fichiers que je tiens à être versionnés, et ne doivent donc jamais être validés. Avec le fichier .gitignore de Git, vous pouvez ignorer des répertoires entiers. Mais il est parfois utile d’avoir le dossier dans le dépôt. Voici une excellente solution pour répondre à ce besoin.
Ce que j'ai fait par le passé est de placer un fichier .gitignore à la racine de mon référentiel, puis d'exclure le dossier, comme suit:
/app/some-folder-to-exclude
/another-folder-to-exclude/*
Cependant, ces dossiers ne font alors pas partie du repo. Vous pouvez ajouter quelque chose comme un fichier README. Mais vous devez ensuite dire à votre application de ne pas s’inquiéter du traitement des fichiers README.
Si votre application dépend des dossiers présents (bien que vides), vous pouvez simplement ajouter un fichier .gitignore au dossier en question et l'utiliser pour atteindre deux objectifs:
Dites à Git qu'il y a un fichier dans le dossier, ce qui oblige Git à l'ajouter au référentiel. Dites à Git d'ignorer le contenu de ce dossier, moins ce fichier lui-même. Voici le fichier .gitignore à mettre dans vos répertoires vides:
*
!.gitignore
La première ligne (*) indique à Git d’ignorer tout ce qui se trouve dans ce répertoire. La deuxième ligne indique à Git de ne pas ignorer le fichier .gitignore. Vous pouvez insérer ce fichier dans tous les dossiers vides que vous souhaitez ajouter au référentiel.
Vous pouvez enregistrer ce code sous le nom create_readme.php et exécuter le code PHP à partir du répertoire racine de votre projet Git.
> php create_readme.php
Il ajoutera les fichiers README à tous les répertoires vides afin que ces répertoires soient ensuite ajoutés à l'index.
<?php
$path = realpath('.');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
if ( is_dir($name) && ! is_empty_folder($name) ){
echo "$name\n" ;
exec("touch ".$name."/"."README");
}
}
function is_empty_folder($folder) {
$files = opendir($folder);
while ($file = readdir($files)) {
if ($file != '.' && $file != '..')
return true; // Not empty
}
}
?>
Alors fais
git commit -m "message"
git Push
Beaucoup ont déjà répondu à cette question. Il suffit d'ajouter une version de PowerShell ici.
Trouver tous les dossiers vides dans le répertoire
Ajoutez un fichier .gitkeep vide
Get-ChildItem 'Path to your Folder' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object { New-Item ($_.FullName + "\.gitkeep") -ItemType file}