2011-01-18 8 views
7

La fonction de "forking" est-elle spécifique à github? ou existe-t-il un processus purement git pour créer des référentiels enfants "copiés" qui peuvent extraire des mises à jour du parent? Si c'est le cas, comment?Git - Fourche sans Github

EDIT: Je dois être confus au sujet de ce que fait alors git clone. J'ai cru comprendre que git clone est ce que je fais sur ma machine pour obtenir une copie locale du dépôt pour apporter des modifications à, commit, et push de. Nous hébergeons actuellement nos repos avec gitosis. Donc si je voulais accompagner une 'fourchette' je clonerais le référentiel sur le serveur de gitose lui-même (à l'origine)? Cela créerait-il une nouvelle adresse git?

+2

Cette copie locale est une réplique complète des données d'origine. Il n'y a pas de distinction technique entre cela et une fourchette plus formelle. Le bouton de la fourchette de github clone simplement le repo et stocke quelque chose dans leur base de données afin qu'ils puissent se rappeler qu'ils l'ont fait. – Dustin

Répondre

7

Vous ne voulez probablement pas le faire réellement. Les branches dans git sont très belles et légères, et il n'y a vraiment pas de raison pour que vous ne fassiez pas une branche dans le dépôt que vous avez en ce moment. La seule raison pour laquelle je peux penser à faire cela avec un dépôt de gitose est de rendre le contrôle d'accès intéressant, si vous avez un déploiement continu ou quelque chose qui tire d'un référentiel de gitose et que vous voulez donner un accès commit au même code. Je ne veux pas qu'ils puissent écrire à celui qui est déployé. Pour toutes les autres utilisations, vous devriez juste faire une branche avec git branch et faire tout votre travail sur la branche. Alternativement, vous voudrez peut-être cloner un dépôt github et ensuite faire travailler une équipe au sein de votre architecture de gitose centrale. Étant donné ce pré-avertissement, le moyen le plus simple de créer une «fourchette» comme vous l'avez décrit est de créer un référentiel distinct sur le serveur gitosis. Configurez donc un autre référentiel avec l'autre nom - par exemple, si votre référentiel d'origine est [email protected]:repo1.git, vous en créerez un autre à [email protected]:repo1-fork.git. Ajoutez les utilisateurs auxquels vous souhaitez avoir accès.

Ensuite, vous clonez le référentiel: git clone [email protected]:repo1.git qui met une copie complète du repo en ./repo1. Pour le copier de votre version locale vers le référentiel forked, vous pouvez faire un git push [email protected]:repo-fork.git --mirror.

6

Fourchettes sur Github est l'équivalent d'un simple git clone, bien que dans le cas de la fourche, il est plus comme un git clone --mirror.

+0

mise à jour/question éditée. – jondavidjohn

+3

Pour ceux qui se demandent ce qu'est un 'git clone --mirror': http://stackoverflow.com/questions/3959924 – Xavi

4

Chaque fois que vous déposez un référentiel, vous avez créé une fourche. La seule chose que fait la fonctionnalité de fork de GitHub est de faire du clone un repo GitHub, avec une page Web, des graphiques et des statistiques et tout ce qu'il y a de mieux.

En outre, lorsque vous clonez un référentiel, Git fait automatiquement du référentiel d'origine le référentiel "amont" par défaut (le composant distant appelé origin). Donc, hors de la boîte, git pull sans arguments devrait tirer directement de l'original.

+0

question mise à jour/éditée. – jondavidjohn

2
# clone wanted repo 
git clone https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git 

# cd into created folder 
cd ORIGINAL_REPOSITORY 

# add your remote repository as origin 
git remote add origin https://github.com/my_user/my_repository.git 

# add original repository as upstream 
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git 

# when want to pull from upstream just 
git pull upstream master 

# when want to create upstream pull-request just 
# https://git-scm.com/docs/git-request-pull 
# commit-hash - from where to start pull request 
git request-pull commit-hash [email protected]:my_user/my_repository.git 
Questions connexes