Github ajoutant un référentiel en tant que fork à partir d'un clone existant

21

J'ai donc un dépôt git que j'ai cloné à partir d'une source en amont sur ghithub. J'y ai apporté quelques modifications (non validées et dans la branche master). Ce que je veux faire, c'est pousser mes modifications sur ma page github en tant que nouvelle branche et que github le voit toujours comme un fork.

Est-ce possible? Je suis assez nouveau sur git et github. Ma question avait-elle même un sens?

La façon la plus simple à laquelle je peux penser (qui, j'en suis sûr, est la manière la plus courante), est de bifurquer le dépôt sur github. Clonez-le localement dans un répertoire différent. Ajoutez le référentiel d'origine en amont. Créez une branche dans ce nouveau dépôt fourchu. Copiez mes modifications de code à la main dans le nouveau dépôt local. Et puis poussez-le vers mon github.

Est-ce un cas d'utilisation courant qu'il existe un moyen plus simple de le faire sans dupliquer les répertoires?

Je suppose que je demande ici par opposition à SO car je suis sur Linux en utilisant la ligne de commande git et les gens ici donnent de meilleures réponses imo =]

Falmarri
la source
Je suppose que c'est techniquement sur le sujet, mais cela pourrait faire mieux ailleurs, car cela semble être principalement une question github
Michael Mrozek

Réponses:

22

Vous pouvez tout faire à partir de votre référentiel existant (pas besoin de cloner le fork dans un nouveau référentiel (local), créer votre branche, copier vos commits / modifications, etc.).

  1. Préparez vos commits à être publiés.

    Affinez les validations locales existantes (par exemple avec git commit --amendet / ou git rebase --interactive).

    Validez l'une de vos modifications non validées que vous souhaitez publier (je ne sais pas si vous vouliez dire que vous avez des validations sur votre maître local et des modifications non validées, ou simplement des modifications non validées; incidemment, les modifications non validées ne sont pas «sur un branche ”, ils sont strictement dans votre arbre de travail).

    Renommez votre maître branche pour lui donner le nom que vous voulez pour votre « nouvelle branche ». Ce n'est pas strictement nécessaire (vous pouvez passer de n'importe quelle branche à n'importe quelle autre branche), mais cela réduira probablement la confusion à long terme si votre branche locale et la branche de votre fork GitHub ont le même nom.

    git branch -m master my-feature
    
  2. Forkez le dépôt GitHub en amont
    (par exemple) en github.com:UpstreamOwner/repostory_name.gittant que
    (par exemple) github.com:YourUser/repository_name.git.

    Cela se fait sur le site Web de GitHub (ou sur un «client» qui utilise les API GitHub), aucune commande Git locale n'est impliquée.

  3. Dans votre référentiel local (celui qui a été initialement cloné à partir du référentiel GitHub en amont et qui a vos modifications dans son maître ), ajoutez votre référentiel fork en tant que distant:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. Poussez votre branche vers votre référentiel fork sur GitHub.

    git push github my-feature
    
  5. Éventuellement, renommez les télécommandes pour que votre fork soit connu comme «origine» et l'amont comme «amont».

    git remote rename origin upstream
    git remote rename github origin
    

    Une raison pour renommer les télécommandes serait parce que vous voulez pouvoir utiliser git pushsans spécifier de référentiel (il s'agit par défaut de «origine»).

Chris Johnsen
la source
Fonctionne parfaitement, mais lorsque vous créez la télécommande github, je pense que vous manquez le "https: //" dans l'URL Github
jesjimher
1
@jesjimher: Les «URL» de ce post utilisent la «syntaxe de type scp» qui utilise le SSH, pas HTTP (S). Vous devrez également remplacer les deux points par une barre oblique pour les utiliser comme URL HTTP (S) (en supposant que le serveur prend en charge les deux sans modifications supplémentaires de l'espace de noms, ce que GitHub fait).
Chris Johnsen
Oups, vous avez raison, Chris, j'avais mal tapé le colon comme une barre oblique, et donc ça n'a pas fonctionné sauf si j'ai ajouté "https". Désolé pour le bruit ...
jesjimher
À l'étape 4, l'utilisation de l' -uoption peut permettre à votre succursale locale de my-feature suivre la même succursale distante origin/my-feature. La commande est:git push -u github my-feature
YaOzI
C'est génial. La seule chose que j'ai dû changer était l'adresse github!
Tico
0

Il existe un outil: hub

hubest un outil de ligne de commande qui encapsule gitafin de l'étendre avec des fonctionnalités et des commandes supplémentaires qui facilitent le travail avec GitHub

Maintenant vous pouvez:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
Evgeny Vereshchagin
la source