我需要project A
在我的项目中使用 GitHub 上的公开,并进行一些我无法检查到 GitHub 并搞乱原作者的工作的修改,但我确实需要将作者的更新拉到我的公司中。
我想知道如何在我的公司中托管卫星 Git 存储库,同时将其保留为我们自己的来源并从真实来源获取更新?
这个问题有点不清楚,但听起来你可能有自己的 Git 存储库,但你想在你的代码中包含一个 3rd-party Git 存储库作为库。您拥有的一种选择是使用Git Submodules。我以前从未使用过其中之一,因此您必须阅读它们的工作原理。
我还听说另一个选项是git subtree
,但这也是我以前从未使用过的东西,而且它目前也没有记录在主要的 Git 文档中。subtree
您可以从 Git 子模块的替代品中了解更多信息:Git Subtree。
这个问题有点不清楚,但听起来你基本上只是想在 GitHub 上创建一个项目的公司分支作为你的来源,但你仍然想从原始存储库中获取提交。GitHub 用于原始远程源 repo 的术语是upstream
repo,您可以将其作为另一个远程添加到任何克隆:
git remote add upstream <url-of-original-repo>
然后只需从中获取更改upstream
,并将其与您的原始提交合并,或在其之上重新调整您的工作,或者您想做的任何其他事情:
git fetch upstream
git checkout -b master origin/master
git merge upstream/master
git push origin master
正如GitHub 帮助页面“Fork a Repo”所述(强调我的):
当一个仓库被克隆时,它有一个名为origin的默认远程,它指向你在 GitHub 上的 fork,而不是它被 fork 的原始仓库。要跟踪原始存储库,您需要添加另一个名为的远程
upstream
:cd Spoon-Knife git remote add upstream https://github.com/octocat/Spoon-Knife.git git fetch upstream
如果您派生项目的原始存储库得到更新,您可以通过运行以下代码将这些更新添加到您的 fork 中:
# Fetches any new changes from the original repository git fetch upstream # Merges any changes fetched into your working files git merge upstream/master
git remote add myremote ssh@your.githost.com/repo
将添加一个新的原始仓库。
但是,根据许可证的不同,如果不在公共场所提供修改后的源代码,则修改源代码以供您的公司使用可能是不合法的。如果您克隆的 GitHub 存储库的许可证是 GPL 等,那么最好的办法是在 GitHub 上分叉该项目。