GIT 与主流合并并同时编辑我自己的版本



我找到了一个开源系统,它有我需要的80%的功能。我想克隆它并添加其余功能。由于这些功能非常具体,并且开源仅由所有者维护,因此我不会将我的代码提交到其中。我可以执行以下操作以及如何操作

  1. 我克隆现有版本,然后继续编辑源代码。
  2. 当该系统中有更新时,我会收到该更新并合并到我的源代码中
  3. 当然,所有的事情都在GitHub上做

是的。
1-首先,您分叉存储库,这意味着您将在GitHub上拥有该存储库的副本。

2-在您的机器上克隆您自己的存储库(新分叉的存储库(并开始工作。

3-您的存储库可能是"源"(远程存储库的名称(,而会有"上游"。每当他们有更改时,你都可以从他们的存储库拉取到本地计算机上,然后推送到存储库。

但请注意,由于提交历史记录不会相同,因此可能会不时发生冲突。

至 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 上托管存储库,那么要么按照其他人的建议进行分叉,要么创建自己的存储库。无论如何,您最终都应该得到一个存储库和两个远程存储库。

是的,尽管您可能希望使事情变得更简单,并从分叉原始文件开始(假设原始文件已经在GitHub上(。这将直接在 GitHub 上形成您自己的存储库,现在您可以将其克隆到您的计算机并开始播放。

要意识到的事情只是允许计算机上的存储库与多个远程(GitHub 上的存储库(通信。因此,您没有理由不应该将提交推送到 GitHub 上的存储库,然后转向原始文件并要求获取它可能提供的任何新内容。任何推送或获取/拉取都允许指定它应该与哪个远程通信。在分叉之后,原始的通常被命名为upstream而你在 GitHub 上的分叉通常被称为origin,但这些只是约定。

这种工作方式是,除了您可以直接看到的分支之外,您还有"远程分支",这些分支在某个远程仓库的 GitHub 上"跟踪"(配置为对应(同名分支。因此,例如,如果您有一个分支master,您还有一个名为origin/master的"远程分支"对应于您最初从中克隆的 GitHub 存储库上的master

好吧,不同的遥控器在你的机器上有不同的远程分支,所以你的 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,用于跟踪 GitHub 存储库上的master,以及另一个远程分支upstream/master,用于跟踪我从中分叉的原始 GitHub 存储库上的master。我可以随时获取其中任何一个,然后根据需要合并到我的工作区master。我还可以从我的master推送到origin/master到我的 GitHub 存储库上的master;但我不能用upstream/master做到这一点,因为我对该存储库没有写入权限(这就是我首先分叉的原因(!

最新更新