GIT объединить с основным потоком и редактировать мою собственную версию одновременно - PullRequest
0 голосов
/ 03 февраля 2020

Я нахожу систему с открытым исходным кодом, в которой 80% функций мне нужно. Я хочу клонировать его и добавить остальные функции. Так как эти функции очень специфичны c и открытый исходный код поддерживается только владельцем, я не буду фиксировать свой код в нем. Могу ли я сделать следующее и как

  1. я клонирую существующую версию, затем продолжаю редактировать исходный код.
  2. когда в этой системе происходит обновление, я получаю это обновление и сливаюсь с моим исходным кодом
  3. конечно, все вещи в GitHub

Ответы [ 3 ]

0 голосов
/ 03 февраля 2020

К 1 .: git clone <repo-url> (https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)

К 2 .: Просто переименуйте исходный пульт дистанционного управления с origin на oldOrigin и извлеките его, когда обновление происходит в исходном репозитории (с использованием git pull -u oldOrigin <targetBranch>)

Я не понимаю ваш вопрос 3. Но ... если вы имеете в виду, что хотите разместить свой репозиторий на github, то либо выполните форк, как предложили другие или создайте свой собственный репо. В любом случае вы должны получить один репозиторий и два удаленных.

0 голосов
/ 03 февраля 2020

Да.
1 - сначала вы разветвляете репозиторий, что означает, что у вас будет копия этого репо на вашем github.

2 - клонируйте свое собственное репо (только что раздвоенное) на свою машину и начинайте работать.

3- Ваш репо, вероятно, будет "origin" (имя вашего удаленного репо), в то время как там будет "upstream". Всякий раз, когда у них есть изменения, вы можете вытащить их репо на свой локальный компьютер, а затем отправить sh в свое репо.

Но будьте осторожны, время от времени может возникать конфликт, поскольку история коммитов не будет то же самое.

0 голосов
/ 03 февраля 2020

Да, хотя вы можете сделать вещи еще проще и начать с разветвления оригинала (при условии, что оригинал уже есть на GitHub). Это создаст ваше собственное репо на GitHub напрямую, и теперь вы можете клонировать его на свой компьютер и начать играть.

Нужно понять, просто, что репо на вашем компьютере разрешено общаться более чем с одним remote (репозитории на GitHub). Таким образом, нет никаких причин, по которым вы не должны делать pu sh коммиты в своем репо на GitHub, а затем переходить к оригиналу и просить получить что-нибудь новое, что он может предложить. Любому pu sh или fetch / pull разрешено указывать, с каким пультом он должен общаться. После разветвления оригинал обычно называется upstream, в то время как ваш разветвление на GitHub обычно называется origin, но это всего лишь условные обозначения.

Способ работает так, что в дополнение к ответвлению (-ям) Вы можете непосредственно видеть, что у вас есть «удаленные ветви», которые «отслеживают» (настроены для соответствия) ветви с тем же именем в GitHub в определенном удаленном хранилище. Так, например, если у вас есть ветвь master, у вас также есть «удаленная ветвь» с именем origin/master, соответствующая master в репозитории на GitHub, с которого вы изначально клонировали.

Ну, у разных пультов есть разные ветки на вашей машине, поэтому ваша копия git никогда не запутается в том, откуда взялись вещи и с кем они должны общаться. Ничто не может случайно что-то сломать (особенно, если вы ограничитесь высказыванием fetch и не говорите pull).

Чтобы проиллюстрировать, я начну с клонирования моей собственной вилки чужого GitHub репо:

humlet:Downloads matt$ git clone https://github.com/mattneub/Animate-body.git
Cloning into 'Animate-body'...
remote: Enumerating objects: 35, done.
remote: Total 35 (delta 0), reused 0 (delta 0), pack-reused 35
Unpacking objects: 100% (35/35), done.
humlet:Downloads matt$ cd Animate-body/

Теперь я перейду к исходному репо, с которого было разветвлено мое репо, и превращу его в пульт для репо здесь, на моем компьютере (на самом деле все должно быть в одной строке) :

humlet:Animate-body matt$ git remote add upstream 
    https://github.com/imyrvold/Animate-body.git

Теперь я сделаю выборку из оригинала:

humlet:Animate-body matt$ git fetch --all
Fetching origin
Fetching upstream
From https://github.com/imyrvold/Animate-body
 * [new branch]      master     -> upstream/master

Чтобы увидеть результат, я перечислю все мои ветви:

humlet:Animate-body matt$ git branch --list --all
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/fix
  remotes/origin/master
  remotes/upstream/master

Так что мое рабочее пространство master не затронуто, но за кулисами у меня есть удаленная ветка origin/master, которая отслеживает master в моем репозитории GitHub, и другая удаленная ветка upstream/master, которая отслеживает master в оригинальное GitHub репо, от которого я разветвился. Я могу в любой момент получить или из них, а затем при желании влиться в мое рабочее пространство master. Я также могу сделать pu sh с моего master через origin/master до master на моем репозитории GitHub; но я не могу сделать это с upstream/master, потому что у меня нет прав на запись в этом хранилище (именно поэтому я разветвлялся в первую очередь)!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...