Jam*_*ite 23 git github repository xbmc git-subtree
抱歉,我是Git和GitHub的新手,我已经阅读了一些内容,但我不确定我尝试做的事情是否完全有可能.
基本上我想分叉XBMC上使用的Confluence Skin并修改位于此处的各种元素:
https://github.com/xbmc/xbmc/tree/master/addons/skin.confluence
但是我不想分叉整个XBMC存储库,所以一个简单的fork操作不会这样做.
以下是我的一般要求:
我想获取skin.confluence文件夹的内容并将其放入我自己的GitHub帐户的存储库中
我需要能够在原始XBMC仓库中保持链接以接收上游提交,因为我的修改通常是基于主题的,而不是功能.
感谢tbekolay发布的响应,我已经能够进行子树拆分,只采用repo的skin.confluence部分并基本上创建一个分支,但我不确定如何保持它与原始的XBMC repo链接我修改后推到了自己的仓库.
tbe*_*lay 46
这通常是可能的git,虽然它不是一个典型的用例,所以当你这样做时可能会有一些粗糙的边缘(特别是如果你是新手git).
我们将用于此工作的工具是git subtree.
首先克隆整个XBMC存储库.
git clone https://github.com/xbmc/xbmc.git
cd xbmc
Run Code Online (Sandbox Code Playgroud)
我们master默认从分支开始.我们想要创建自己的master分支,所以让我们重命名master为upstream-master.
git branch -m upstream-master
Run Code Online (Sandbox Code Playgroud)
现在git subtree split用来只包含你想要的部分.我们将拆分成为一个新的分支upstream-skin.
git subtree split --prefix=addons/skin.confluence -b upstream-skin
git checkout upstream-skin
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个新upstream-skin分支,该分支仅包含内容addons/skin.confluence,并且包含仅包含已修改文件的提交的筛选历史记录addons/skin.confluence.
现在,让我们设置我们的遥控器.自从你克隆后xbmc/xbmc.git,origin遥控器将指向那里.让我们重命名为upstream.
git remote rename origin upstream
Run Code Online (Sandbox Code Playgroud)
在Github上创建一个存储库以包含您的修改addons/skin.confluence.作为一个例子,我将使用tbekolay/xbmc-skin,但用你自己的repo替换它.将此repo添加为远程,并将upstream-skin分支推送到它.
git remote add origin https://github.com/tbekolay/xbmc-skin.git
git fetch origin
git push -u origin upstream-skin
Run Code Online (Sandbox Code Playgroud)
最后,我们将创建一个master包含您的更改的新分支.
git checkout -b master
git push -u origin master
Run Code Online (Sandbox Code Playgroud)
你现在有一个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
Run Code Online (Sandbox Code Playgroud)
当您处理上游存储库时,您将不得不使用混合git和git subtree命令.要获得新的过滤提交,我们需要分三个阶段完成.
在第一阶段,我们将更新upstream-master到当前版本的XBMC存储库.
git checkout upstream-master
git pull
Run Code Online (Sandbox Code Playgroud)
如果有的话,这应该删除新的提交.
接下来,我们将upstream-skin使用新的过滤版本的提交进行更新.由于git subtree确保提交哈希值相同,因此这应该是一个干净的过程.请注意,您仍希望在upstream-master分支上运行这些命令.
git subtree split --prefix=addons/skin.confluence \
--onto upstream-skin -b upstream-skin
Run Code Online (Sandbox Code Playgroud)
随着upstream-skin现在已经更新,您可以更新master您认为合适的(无论是通过合并或重定基)的分支.
git checkout master
git rebase upstream-skin
Run Code Online (Sandbox Code Playgroud)
请注意,XBMC存储库是巨大的,并且git subtree命令将花费相当多的时间来过滤所有历史记录 - 并且由于每次与远程存储库交互时都重新生成拆分子树,因此这是非常昂贵的操作.我不确定这是否可以加速.
这篇博文详细介绍了上述命令.另请参阅git-subtree文档以获取更多详细信息.
| 归档时间: |
|
| 查看次数: |
7458 次 |
| 最近记录: |