在 GitHub 上创建一个存储库的子目录,并将其作为我自己的存储库的一部分

2024-03-22

抱歉,我对 Git 和 GitHub 很陌生,我已经阅读了一些内容,但我不确定我想要做的是否是entirely可能的。

基本上我想分叉 XBMC 上使用的 Confluence Skin 并修改此处的各种元素:

https://github.com/xbmc/xbmc/tree/master/addons/skin.confluence https://github.com/xbmc/xbmc/tree/master/addons/skin.confluence

但是我不想分叉整个 XBMC 存储库,因此简单的分叉操作是行不通的。

以下是我的一般要求:

  • 我想获取 Skin.confluence 文件夹的内容并将其放入我自己的 GitHub 帐户上的存储库中

  • 我需要能够将其链接到原始 XBMC 存储库中以接收上游提交,因为我的修改通常是基于主题的,而不是基于功能的。

感谢 tbekolay 发布的回复,我已经能够进行子树拆分,以仅获取存储库的 Skin.confluence 部分,并本质上创建一个分支,但是我不确定如何在创建分支时保持它与原始 XBMC 存储库的链接通过我的修改推送到我自己的存储库。


这大多是可能的git,尽管这不是一个典型的用例,所以当您这样做时可能会遇到一些粗糙的问题(特别是如果您是新手git).

我们将用于这项工作的工具是git subtree.

设置存储库

首先克隆整个 XBMC 存储库。

git clone https://github.com/xbmc/xbmc.git
cd xbmc

我们从master默认分支。我们想做我们自己的master分支,所以让我们重命名master to upstream-master.

git branch -m upstream-master

Now use git subtree split仅包含您想要的部分。我们将把分离的部分作为一个新的分支,称为upstream-skin.

git subtree split --prefix=addons/skin.confluence -b upstream-skin
git checkout upstream-skin

这给你一个新的upstream-skin只包含以下内容的分支addons/skin.confluence,并且经过过滤的历史记录仅包含修改文件的提交addons/skin.confluence.

现在,让我们设置遥控器。自从你克隆了xbmc/xbmc.git, the origin遥控器将指向那里。让我们将其重命名为upstream.

git remote rename origin upstream

在 Github 上创建一个存储库来包含您的修改addons/skin.confluence。作为示例,我将使用 tbekolay/xbmc-skin,但将其替换为您自己的存储库。将此存储库添加为遥控器,然后推送您的upstream-skin分支到它。

git remote add origin https://github.com/tbekolay/xbmc-skin.git
git fetch origin
git push -u origin upstream-skin

最后,我们将创建一个名为master其中将包含您的更改。

git checkout -b master
git push -u origin master

你现在有了一个“叉子”addons/skin.confluence子目录。

更改您的存储库

当您处理自己的本地和远程存储库时,可以使用普通git命令。确保在master分支(或其他一些分支,如果您愿意的话)而不是upstream-skin分支,它应该只包含来自上游项目的提交。

git checkout master
echo "My XBMC Skin" > README
git add README
git commit -m "Added README"
git push

接收上游提交

当您处理上游存储库时,您将不得不混合使用git and git subtree命令。为了获得新的过滤提交,我们需要分三个阶段进行。

第一阶段我们会更新upstream-master到 XBMC 存储库的当前版本。

git checkout upstream-master
git pull

这应该会拉下新的提交(如果有的话)。

接下来我们将更新upstream-skin使用新的过滤版本的提交。自从git subtree确保提交哈希值相同,这应该是一个干净的过程。请注意,您希望在运行这些命令时仍在upstream-master branch.

git subtree split --prefix=addons/skin.confluence \
  --onto upstream-skin -b upstream-skin

With upstream-skin现已更新,您可以更新您的master根据您的需要进行分支(通过合并或变基)。

git checkout master
git rebase upstream-skin

请注意,XBMC 存储库非常庞大,并且git subtree命令将花费相当多的时间来过滤所有历史记录 - 并且由于每次与远程存储库交互时都要重新生成分割子树,因此这是一项相当昂贵的操作。我不确定这是否可以加快。

这篇博文 https://web.archive.org/web/20131123125622/http://blog.charlescy.com/blog/2013/08/17/git-subtree-tutorial/更详细地介绍上面的命令。另请参阅git-subtree docs https://github.com/apenwarr/git-subtree/blob/master/git-subtree.txt了解更多详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 GitHub 上创建一个存储库的子目录,并将其作为我自己的存储库的一部分 的相关文章

  • 如何在 VS Code 中仅提交跟踪文件?

    git status 显示以下三个信息 要提交的变更 分阶段变更 未暂存提交的更改 未暂存更改 未跟踪的文件 我曾经git commit a 它提交 1 和 2 然而VS代码Commit All提交 1 2 和 3 Commit Stage
  • Git 子模块在 Windows 上更新缓慢

    Git 子模块在 Windows 上似乎非常慢 为了测试性能 我创建了 3 个裸存储库并向它们提交了 3 条独立消息 未存储文件 然后 我将每个裸存储库作为子模块添加到新的 git 存储库中 并执行子模块更新 花费了 5 秒多的时间 当使用
  • Git:man 命令不起作用

    在 Git Bash 中 他们给了我一个error用于返回 man command man git bash man command not found 我的 Git 版本 git version git version 2 18 0 wi
  • Git 显示更改后的相同文件

    当我似乎无法弄清楚更改时 Git 向我显示整个文件已更改 这是 cygwin git 但它也发生在 msysgit 中 git version git version 2 1 1 diff lt git show HEAD File cs
  • 如何在 Android Studio 中比较两个 Git 分支?

    我不确定是否可以将主分支 或任何其他分支 与当前功能分支进行比较 例如GIT does 我想要两个分支 主分支和功能分支 之间的差异 以便我可以在合并之前比较差异 我发现 Git UI 对用户不太友好 就像在 AS 中一样 我可以遍历代码并
  • 如何在 git diff 中按标点符号拆分单词?

    我对以下命令有一些运气 git diff color words lt gt space lt gt 但它似乎没有在第一个字符类中正确地否定方括号 我试过这个 git diff color words lt gt space lt gt 为
  • 我可以为 GitHub Pages 创建多个存储库吗?

    我创建了一个用于在 GitHub 上托管博客的存储库 有什么方法可以创建额外的存储库来托管多个博客 或者我仅限于一个存储库 因为用户名 github io只能使用一次吗 您可以将一个站点发布到https
  • 有没有办法列出Git中未修改的文件?

    我从另一个来源以 tarball 的形式获取了一些更改 我想知道哪些文件没有更改 目标是 Git 克隆 因此可以轻松查看新增内容和更改内容 有人知道如何获取未更改内容的列表 不包括未跟踪的内容 吗 编辑 换句话说 我希望利用 Git 来查找
  • 配置 github 以使用其他文件作为 README

    由于 Eclipse 和 EGit 组织文件和目录的方式不同 我的 README md 文件并不位于 git 存储库的根目录中 而是位于更深的一个文件夹中 我怎样才能告诉github显示some folder README md作为项目的自
  • 如何重命名 GitHub 网站上的目录/文件夹?

    我在 GitHub 网站上找到了一种方法rename https github com blog 1436 moving and renaming files on github一个文件并成功完成 我也找到了一种方法rename https
  • Git - 推送到远程存储库中的远程跟踪分支

    当简单地做git push到远程存储库 其master分支得到更新 对于非裸存储库来说 这是不希望出现的情况 最近的 Git 版本显示的警告消息清楚地表明了这一点 我希望能够推送到远程存储库 并拥有其之一远程追踪分支进行更新 稍后 当我登录
  • Gerrit 安装后无法克隆所有项目存储库

    我有一个新设置的 Gerrit 实例 目前只有两个存储库 所有项目 binutils 测试 尝试克隆所有项目时 我收到以下错误 git clone ssh user hostname 29418 All Projects Initializ
  • Git:如何使外部存储库和嵌入式存储库作为通用/独立存储库工作?

    我有一个大项目 比方说A repo 其中有一个子文件夹来自B repo 当我提交时 我会遇到如下警告A repo warning adding embedded git repository extractor annotator serv
  • 如何查看上次提交和现在之间发生了什么变化(进行一些更改后)

    与此类似question https stackoverflow com questions 1552340 how to list the file names only that changed between two commits但
  • 受保护分支设置中的检查列表中缺少 Github 操作状态检查

    我有以下 github 操作设置 可以在创建 Pull 请求时正常触发 但它不会出现在受保护分支 主分支 的状态检查列表中 我不确定我做错了什么 name Python application on pull request branche
  • 为什么cherry-pick总是会导致合并冲突?

    我正在从发布分支中挑选特定的提交到我的本地工作副本中 每次我从发布分支中挑选一个提交时 我都会遇到必须解决的合并冲突 即使更改看起来微不足道 例如 const char kApplicationVersion Develop const c
  • `git rm --cached` 和 `git update-index --assume-unchanged` 之间的区别?

    我不明白之间的区别git rm cached and git update index assume unchanged 我知道git rm cached
  • 在 git repo 中查找超过 x MB 且 HEAD 中不存在的文件

    我有一个 Git 存储库 用于存储随机的内容 主要是随机脚本 文本文件 我设计的网站等 随着时间的推移 我删除了一些大型二进制文件 通常为 1 5MB 这些文件会增加存储库的大小 而我在修订历史记录中不需要这些文件 基本上我希望能够做到 m
  • git 可以与 Xcode 集成吗?

    有没有办法将 git 存储库与 Xcode 内置的 SCM 功能一起使用 Xcode 4 原生支持 git WWDC 2010 上的开发者工具国情咨文演讲 在这里了解更多 Xcode 4 中的新增功能 http developer appl
  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭

随机推荐