为库添加分支(使用某库的分支作为源码,添加至自己库中作为一个分支)

作者描述了如何为个人库添加ImGui的docking分支,从1.68版本升级到1.73版本以解决兼容性问题,并分享了在处理子模块和git分支管理中的经验,包括网络连接问题和git命令的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们将解决:(如何创建分支/如何删除分支/如何在子模版中切换分支/网络问题

操作步骤(新)

对于添加分支,之前的操作步骤不够简便,我将其重新更新。

同时,我也将留下以前的步骤,因为这对于指令的理解较为重要。感兴趣的话可以向下翻阅。

第一步:打开本地库的根目录

第二步:进入 CMD

第三步:使用指令(将进行:为本地库创建新分支、为新分支合并指定代码)

git checkout -b <new_branch_name> <hash_code>
//示例:git checkout -b V2.4.1 9ebbbcd

V2.4.1 是我为本地库新分支起的名字。

93bbbcd 是源库维护者在发布 2.4.1 版本时,commit 操作的哈希值。

具体可以参考:(图一图二:Releases 界面。图三图四:tag 以及某一 commit 的最后一次提交)

-------------------------------------------------------------

第四步 :将合并的代码进行推送

git push origin V2.4.1
//示例:git push origin V2.4.1

至于这里的 origin 是什么意思,以及要不要修改,请自行查阅。

对于默认情况(未做任何更改时),上述指令适用。 

运行实例图:

目的:上一个文章中我 clone 了 ImGui 旧版本中 master 分支的代码,并将其作为个人库的 master 分支。。现在我还想为个人库添加 ImGui 另一个分支的代码: docking 分支。

何出此言:

在之前的实验中,为了保持和 Cherno (一个youtuber)相同的操作,我 fork 了 ImGui 的旧版本,但是在个人库中只有一个分支,不像 Fork 最新库那样能够包含多个分支。

现在为了实现 docking 停靠效果,我根据 Cherno 视频发布的日期推算出他当时操作的是 ImGui v1.68 版本的库

于是我决定为我的个人库也添加一个docking分支,以便操作。

也为了方便踩到未知的坑,说不定呢 XD

操作步骤:

1.打开克隆到本地并做过修改的那个库的根目录下。

2.cmd 进入 命令行提示符中。

3. 进行操作:

3.1 在本地切换源库的另一个版本:
git checkout v1.73
//git checkout <tag_name>
3.2 切换到想使用的分支: 
git checkout docking
//git checkout <你要使用的源库的某一分支>
3.3 创建新分支
git checkout -b <My_Docking_Branch_Name>
3.4 将源库某一分支的内容合并到新建分支中 
//上一步 git checkout -b <My_Docking_branch_name你给个人库中新建分支起的名字>
git merge docking

即将 docking 分支的内容合并到 MyDocking 分支中

3.5 将新分支推送到个人库: 
git push -u new-origin <My_Docking_branch_name>

----------------运行实例图:---------------------

-------------------------------------------------

4.收获成功的喜悦

如何删除分支

1.在本地库中删除本地分支

git branch -d <branch_name>

2.删除本地仓库中跟踪的远程分支

git branch -dr <origin_which_you_want_to_use/branch_name>
//默认情况下为origin(如果你有声明过另一个origin比如new-origin的话,记得要标明
//如果不清楚可以 git branch -r 查看一下全部)

3.删除远程仓库的分支

3.1

git push new-origin --delete <branch_name>

3.2

或者

在子模版中的操作

子模块切换分支的方法

0.如果需要的更新子模块分支情况:

git fetch origin

1. 进入子模块目录,找到想要切换分支的子模块目录,然后进入它的根目录切换到想要的分支:

git checkout branch_name        //这会将子模块切换到名为 branch_name 的分支

2. 返回到子模版目录:

cd ..

3.1 提交主项目的变更:

git add path/to/submodule

3.2

git commit -m "Switch submodule to branch_name"

(可选:如果你只是想在本地切换子模块的分支,而不需要将这个更改记录在主项目的提交历史中,那么提交主项目的变更就不是必须的。)

之后如果需要将父仓库推送到远程仓库,使用命令 git push 进行推送

如果在远程上传了文件的话,记得更新本地库之后使用。

对了,V1.73版本支持 Table 这个功能,所以子模块跟随变更后,其中的premake文件需要添加一个文件

project "ImGui"
    kind "StaticLib"
    language "C++"

    targetdir ("bin/" .. outputdir .. "/%{prj.name}")
    targetdir ("bin-int/" .. outputdir .. "/%{prj.name}")

    files
    {
        "imconfig.h",
        "imgui.h",
        "imgui.cpp",
        "imgui_draw.cpp",
        "imgui_internal.h",
        "imgui_widgets.cpp",
        "imstb_rectpack.h",
        "imstb_textdit.h",
        "imstb_truetype.h",
        "imgui_demo.cpp",
        "imgui_tables.cpp"                --For the newly "table" functions which introduced form ImGui v1.73
    }

    filter "system:windows"
        systemversion "latest"
        cppdialect "C++17"
        staticruntime "On"

    filter { "system:windows", "configurations:Release" }
        buildoptions "/MT"

题外话:

1.关于网络连接

顺便一提 ,与 github 之间的偶尔网络波动和访问超时问题可能是由于网络代理原因,比如你能想到的(没错就是那个玩意)

You can :

还可以参考这俩文章,但上述指令已经达到了效果。

英文论坛(可能不易访问)

csdn上一篇文章

还有一篇文章

2.关于 git 指令的解释

git pull new-origin docking
//从名为 new-origin 的远程仓库中拉取 docking 分支的更新,并将其合并到当前本地分支中

理解:这里的 new-origin  作为仓库的别名来使用。

通常情况下,origin是默认的远程仓库名称,在克隆仓库时自动创建,可以用于标识克隆源的远程仓库。

但在这里,因为使用了 new-origin 作为远程仓库的别名,所以之后在一些场景中可能需要使用 new-origin。

那么可不可以使用 origin 这个默认的别名呢?

答案是:看情况

git remote -v
//查看远程仓库的别名和对应的 URL

可以看到,在这里是不一样的,两个 origin 来自不同的 URL ,故不能混用,要清楚其意义 

 

 -------------来自后期----------

同时,也是成功的踩了个大坑。

(虽然时间对的上,但是 docking 分支好像是在 1.70版本左右开始被开发出来的)

奇奇怪怪,但是我决定使用 1.70 之后的版本了,因为1.68确实导致了一些错误(找不到ImGuiConfigFlags_DockingEnable 这样的错误)不如使用 1.73 看起来稳定一些,反正也修复了一堆我看不懂的错误。

端倪:

后来我在本地旧版本 imgui 库中对分支情况进行查看

解释一下为什么长这样:

之前克隆下来一个最新库,然后生成一个"old-version-branch"分支来包含旧版本库,并将该分支上传至私人库中,这样我就可以去使用旧版本。

这次我在本地的库中新生成了一个分支 "docking",这个分支包含着 ImGui 版本中的 docking 分支。方便自己使用特定版本的 docking 功能)

发现:确实存在两个docking,这是由于我自己新建的 docking 和 old-version-branch 分支位于new-origin,而私人库中的分支来源于 ImGui 的 origin。

所以在子模块切换分支时,选择错误的 docking 可能会导致错误,并狠狠地掉两根头发。

当然这还不是真正的错误, 但的确逼迫我重新分析问题

最终结论:在深深思考和实验之后,我发现我创建分支的方法有问题,特别是没有在本地库中切换到合适的版本,也没有进行 merge 这个步骤,所以我对步骤进行了修改(下面呈现步骤的已经被修改了)

代码中的效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值