Question Comment puis-je ajouter un répertoire vide à un dépôt Git?


Comment puis-je ajouter un répertoire vide (qui ne contient aucun fichier) à un dépôt Git?


3469
2017-09-22 16:41


origine


Réponses:


Une autre façon de rendre un répertoire vide (dans le référentiel) est de créer un .gitignore fichier dans ce répertoire qui contient ces quatre lignes:

# Ignore everything in this directory
*
# Except this file
!.gitignore

Ensuite, vous n'avez pas à obtenir la commande comme vous le feriez dans m104 Solution.

Cela donne également l'avantage que les fichiers de ce répertoire n'apparaîtront pas comme "non-suivis" lorsque vous faites un statut git.

Fabrication @GreenAsJadeLe commentaire persistant:

Je pense qu'il vaut la peine de noter que cette solution fait exactement ce que la question a demandé, mais ce n'est peut-être pas ce que beaucoup de gens qui ont regardé cette question auraient cherché. Cette solution garantit que le répertoire reste vide. Il dit "Je ne veux vraiment jamais que les fichiers soient enregistrés ici". Contrairement à "Je n'ai pas encore de fichiers à vérifier ici, mais j'ai besoin du répertoire ici, les fichiers viendront peut-être plus tard".


3359
2018-05-31 22:10



Tu ne peux pas. Voir le Git FAQ.

Actuellement la conception de l'index git   (zone de transit) autorise uniquement les fichiers à   être répertorié, et personne de suffisamment compétent   faire le changement pour permettre à vide   répertoires a pris soin de suffisamment à propos de   cette situation pour y remédier.

Les répertoires sont ajoutés automatiquement   lors de l'ajout de fichiers à l'intérieur d'eux. Cette   est, les répertoires ne doivent jamais être ajoutés   dans le référentiel et ne sont pas suivis   par eux-même.

Tu peux dire "git add <dir>" et cela   va ajouter des fichiers là-bas.

Si vous avez vraiment besoin d'un répertoire pour   exister dans les caisses, vous devriez créer un   déposer dedans. .gitignore fonctionne bien pour   Cet objectif; vous pouvez le laisser vide,   ou remplissez les noms des fichiers que vous   s'attendre à apparaître dans le répertoire.


981
2017-09-22 16:42



Créer un fichier vide appelé .gitkeep dans le répertoire, et ajoutez-le.


594
2017-12-07 16:03



Vous pouvez toujours mettre un fichier README dans le répertoire avec une explication de la raison pour laquelle vous voulez ce répertoire, sinon vide, dans le dépôt.


368
2018-03-14 23:38



touch .keep

Sous Linux, ceci crée un fichier vide nommé .keep. Ce nom est préféré à .gitkeep comme le premier est agnostique à Git, alors que le dernier est spécifique à Git. Deuxièmement, comme un autre utilisateur l'a noté, le .git La convention de préfixe devrait être réservée aux fichiers et répertoires que Git utilise lui-même.

Alternativement, comme indiqué dans un autre répondre, le répertoire peut contenir un descriptif README ou README.md fichier au lieu.

Bien sûr, cela nécessite que la présence du fichier ne provoque pas la rupture de votre application.


259
2018-01-29 04:29



Pourquoi aurions-nous besoin de dossiers versionnés vides

Premières choses d'abord:

Un répertoire vide ne peut pas faire partie d'un arbre sous le système de gestion de version Git.

Il ne sera tout simplement pas suivi. Mais il existe des scénarios dans lesquels "versioning" un répertoire vide peut être utile, par exemple:

  • construire un structure de dossier prédéfinie pour les dossiers de projet utiles, et rendre cette structure disponible pour chaque utilisateur / contributeur du référentiel; ou, comme un cas spécialisé de ce qui précède, la création d'un dossier pour fichiers temporaires, tel qu'un cache/ ou logs/ répertoires
  • quelques projets tout simplement ne fonctionnera pas sans quelques dossiers (ce qui est souvent une indication d'un projet mal conçu, mais c'est un scénario réel dans le monde réel et peut-être qu'il pourrait y avoir, disons, des problèmes d'autorisation).

Quelques solutions de contournement suggérées

De nombreux utilisateurs suggèrent:

  1. Placer un README fichier ou un autre fichier avec du contenu afin de rendre le répertoire non vide, ou
  2. Créer un .gitignore fichier avec une sorte de "logique inverse" (c'est-à-dire pour inclure tous les fichiers) qui, à la fin, sert le même but de l'approche # 1.

Tandis que les deux solutions fonctionnent sûrement Je les trouve inconsistants avec une approche significative du versioning de Git.

  • Pourquoi êtes-vous censé mettre des fichiers bidon ou des fichiers README que vous ne voulez peut-être pas vraiment dans votre projet?
  • Pourquoi utiliser .gitignore faire une chose (en gardant fichiers) qui est le contraire de ce à quoi il est destiné (à l'exclusion fichiers), même si c'est possible?

approche .gitkeep

Utilisez un vide fichier appelé .gitkeep afin de forcer la présence du dossier dans le système de versionnage.

Bien que cela puisse sembler pas une si grande différence:

  • Vous utilisez un fichier qui a le unique but de garder le dossier. Vous n'y mettez aucune information que vous ne voulez pas mettre.

    Par exemple, vous devriez utiliser READMEs comme, bien, READMEs avec des informations utiles, pas comme une excuse pour conserver le dossier.

    La séparation des préoccupations est toujours une bonne chose, et vous pouvez toujours ajouter .gitignore ignorer les fichiers indésirables.

  • Le nommer .gitkeep rend très clair et simple à 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 principaux objectifs d'un dépôt Git) que ce fichier est

    • Un fichier non lié au code (à cause du point de tête et du nom)
    • Un fichier clairement lié à Git
    • Son but (garder) est clairement énoncé et cohérent et sémantiquement opposé dans son sens à ignorer

Adoption

J'ai vu le .gitkeep approche adoptée par des cadres très importants comme Laravel, Angulaire-CLI.


202
2017-12-04 23:32



Comme décrit dans les autres réponses, Git ne peut pas représenter les répertoires vides dans sa zone de transfert. (Voir le Git FAQ.) Cependant, si, pour vos besoins, un répertoire est assez vide s'il contient un .gitignore fichier seulement, alors vous pouvez créer .gitignore fichiers dans des répertoires vides uniquement via:

find . -type d -empty -exec touch {}/.gitignore \;

119
2018-05-03 15:17