408 votes

Création d'une nouvelle branche vide pour un nouveau projet

Nous utilisons un dépôt git pour stocker notre projet. Nous avons nos branches qui partent de la branche d'origine. Mais maintenant nous voulons créer un nouveau petit projet pour suivre une documentation. Pour cela, nous voulons créer une nouvelle branche vide pour commencer à stocker nos fichiers, et je voudrais que les autres utilisateurs du réseau clonent cette branche.

Comment pouvons-nous faire cela ?

J'ai essayé certaines choses, mais ça n'a pas marché.

$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc

Il semble que la branche soit poussée correctement, mais lorsque je fais un fetch ou un pull, il télécharge des informations à partir d'autres branches, et je reçois également des fichiers supplémentaires provenant d'autres projets. Quelle est la meilleure solution ?

13 votes

Pourquoi devez-vous stocker ceci dans une agence ? Les branches sont généralement destinées à des déviations de la même base de code. Peut-être que le démarrage d'un nouveau dépôt serait une meilleure solution.

2 votes

Eh bien, nous l'avons déjà fait, IIRC, et j'aimerais le refaire, donc je suis curieux ;)

3 votes

"pour un nouveau projet" - Comme @honk, je suggère de mettre cela dans un nouveau dépôt. Deux options à partir de là pour les intégrer. En faire un submodule dans le projet original, par exemple docs/ pointant vers cet autre repo. Ou, si vous voulez fusionner le code plus tard, ajoutez-le en tant que dépôt distant.

779voto

Hiery Nomus Points 4157

Vous pouvez créer une branche en tant qu'orphelin :

git checkout --orphan <branchname>

Cela créera une nouvelle branche sans parents. Ensuite, vous pouvez effacer le répertoire de travail avec :

git rm --cached -r .

et ajouter les fichiers de documentation, les commiter et les pousser vers github.

Un pull ou un fetch met toujours à jour les informations locales sur toutes les branches distantes. Si vous voulez seulement tirer/récupérer les informations d'une seule branche distante, vous devez le spécifier.

20 votes

Bonne réponse, mais c'est un peu ennuyeux que la nouvelle branche démarre avec tous les fichiers (de la branche précédente) mis à disposition.

0 votes

J'ai un problème avec cela, vous ne pouvez pas faire du cherry-pick dans cette nouvelle branche parce que vous ne pouvez pas faire du cherry-pick dans un HEAD vide.

1 votes

@Ray : Si vous avez besoin de faire du "cherry picking", faites une branche à partir du parent commun le plus ancien dont vous avez besoin. Cherry picking dans un repo vide sonne comme un branchement, honnêtement.

74voto

Sid Jain Points 19

La bonne réponse est de créer une branche orpheline. J'explique comment le faire en détail sur mon blog. (Lien archivé)

...

Avant de commencer, mettez à jour la dernière version de GIT. Pour être sûr que vous utilisez la dernière version, exécutez

which git

S'il crache une ancienne version, vous devrez peut-être augmenter votre PATH avec le dossier contenant la version que vous venez d'installer.

Ok, nous sommes prêts. Après avoir fait un cd dans le dossier contenant votre git créez une branche orpheline. Pour cet exemple, je vais nommer la branche "mybranch".

git checkout --orphan mybranch

Supprimer tout ce qui se trouve dans la branche orpheline

git rm -rf .

Faites quelques changements

vi README.txt

Ajouter et valider les changements

git add README.txt
git commit -m "Adding readme file"

C'est ça. Si vous exécutez

git log

vous remarquerez que l'historique des livraisons recommence à zéro. Pour revenir à votre branche principale, exécutez simplement

git checkout master

Vous pouvez revenir à la branche orpheline en exécutant

git checkout mybranch

17 votes

Les réponses ne comportant que des liens ne sont pas encouragées. Si le lien est déplacé ou supprimé, votre réponse n'a plus aucune valeur. Pensez à ajouter les parties essentielles directement dans cette même réponse. Accordez une attention particulière aux questions qui n'ont pas été abordées dans les réponses précédentes.

3 votes

Le lien n'est plus valide, malheureusement.

1 votes

Archives sont une chose merveilleuse.

15voto

jthill Points 10384

Créez une nouvelle branche vide comme ceci :

true | git mktree | xargs git commit-tree | xargs git branch proj-doc

Si vos fichiers proj-doc sont déjà dans un commit sous un seul sous-répertoire, vous pouvez créer la nouvelle branche de cette façon :

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc

ce qui pourrait être plus pratique que git branch --orphan si cela vous laisse avec beaucoup de git rm et git mv à faire.

Essayez

git branch --set-upstream proj-doc origin/proj-doc

et voyez si cela peut vous aider à résoudre votre problème de récupération de données. De plus, si vous ne voulez vraiment récupérer qu'une seule branche, il est plus sûr de la spécifier en ligne de commande.

1 votes

Cette réponse est intéressante car elle vous permet de démarrer une autre branche/Root avec un premier commit totalement vide.

0 votes

Une autre façon de créer une branche vide si cela ne vous dérange pas d'y passer est git checkout --orphan new-branch; git reset --hard

0 votes

Quelle est l'utilité de la xargs ?

9voto

efesaid Points 78

Si votre version de git ne possède pas l'option --orphan, cette méthode doit être utilisée :

git symbolic-ref HEAD refs/heads/<newbranch> 
rm .git/index 
git clean -fdx 

Après avoir fait quelques travaux :

git add -A
git commit -m <message>
git push origin <newbranch>

2 votes

Faites attention, git clean peut supprimer des fichiers que vous ne voulez pas supprimer ! Exécuter git clean -ndx d'abord pour voir quels fichiers il supprimera avant de l'exécuter pour de bon avec le programme -f option.

8voto

user1723157 Points 75

Disons que vous avez un master avec des fichiers/répertoires :

> git branch  
master
> ls -la # (files and dirs which you may keep in master)
.git
directory1
directory2
file_1
..
file_n

Comment faire une branche vide, étape par étape :

  1. git checkout —orphan new_branch_name
  2. Assurez-vous que vous êtes dans le bon répertoire avant d'exécuter la commande suivante :
    ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_
  3. git rm -rf .
  4. touch new_file
  5. git add new_file
  6. git commit -m 'added first file in the new branch'
  7. git push origin new_branch_name

Dans l'étape 2, nous supprimons simplement tous les fichiers localement pour éviter toute confusion avec les fichiers de votre nouvelle branche et ceux que vous conservez dans master branche. Ensuite, nous dissocions tous ces fichiers à l'étape 3. Enfin, les étapes 4 et suivantes fonctionnent avec notre nouvelle branche vide.

Une fois que vous avez terminé, vous pouvez facilement passer d'une branche à l'autre :

git checkout master 
git checkout new_branch

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X