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 次 |
最近记录: |