如是我闻: 随着Isaac Sim 版本更新到4.0, 很神奇的是Orbit更名为了Isaac Lab。主体功能不变,仅仅有一些文件名和文件结构发生了改变。事实上,如果你fork了之前的Orbit,你会发现他真的就是变了个库的名字。而被伤已久的心告诉我,直接使用新版本还有待观望,他许诺的新功能一时半会也放不出来。但是我们可以先把新的版本存到一个branch里慢慢研究,遂有此文。
需求背景
我们fork了一个名为Orbit的仓库,而原始仓库已经重命名为Isaac Lab,并且文件名发生了变化。我们希望在我们的fork仓库中同时保留原先的Orbit版本和新的Isaac Lab版本,并将Isaac Lab版本作为一个新的branch。
解决方案步骤
Step 1: 查看现有的远程仓库
首先,在终端打开我们之前clone的orbit文件夹,查看现有的远程仓库。
git remote -v
输出示例:
origin git@github.com:Yannyehao/orbit.git (fetch)
origin git@github.com:Yannyehao/orbit.git (push)
upstream https://github.com/NVIDIA-Omniverse/Orbit.git (fetch)
upstream https://github.com/NVIDIA-Omniverse/Orbit.git (push)
Step 2: 添加新的上游远程仓库
将新的仓库https://github.com/isaac-sim/IsaacLab
添加为新的上游远程仓库。
git remote add new-upstream https://github.com/isaac-sim/IsaacLab.git
确认新的远程仓库已添加:
git remote -v
输出示例:
new-upstream https://github.com/isaac-sim/IsaacLab.git (fetch)
new-upstream https://github.com/isaac-sim/IsaacLab.git (push)
origin git@github.com:Yannyehao/orbit.git (fetch)
origin git@github.com/Yannyehao/orbit.git (push)
upstream https://github.com/NVIDIA-Omniverse/Orbit.git (fetch)
upstream https://github.com/NVIDIA-Omniverse/Orbit.git (push)
Step 3: 从新的上游仓库获取最新版本
从新的上游仓库获取最新版本的代码。
git fetch new-upstream
输出示例:
remote: Enumerating objects: 2840, done.
remote: Counting objects: 100% (2835/2835), done.
remote: Compressing objects: 100% (1420/1420), done.
remote: Total 2840 (delta 1528), reused 2491 (delta 1286), pack-reused 5
Receiving objects: 100% (2840/2840), 7.04 MiB | 6.22 MiB/s, done.
Resolving deltas: 100% (1528/1528), completed with 11 local objects.
From https://github.com/isaac-sim/IsaacLab
* [new branch] feature/enable_composite_compose -> new-upstream/feature/enable_composite_compose
* [new branch] feature/hydra -> new-upstream/feature/hydra
* [new branch] fix/spot_gait_reward -> new-upstream/fix/spot_gait_reward
* [new branch] gh-pages -> new-upstream/gh-pages
* [new branch] main -> new-upstream/main
* [new tag] v0.3.1 -> v0.3.1
Step 4: 创建新的branch并合并新的上游代码
在你的fork仓库中创建一个新的branch,并将新的上游仓库的新版本代码合并到这个branch中。
git branch
输出示例:
* Introduce-Two-Blocks
main
切换到新的branch:
git checkout -b isaac-lab
输出示例:
Switched to a new branch 'isaac-lab'
合并新的上游仓库的代码:
git merge new-upstream/main
如果出现冲突,暂存当前的本地更改:
git stash
然后再次合并新的上游代码:
git merge new-upstream/main
输出示例:
Auto-merging source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/manager_based/manipulation/lift/config/franka/__init__.py
Auto-merging source/standalone/tutorials/05_controllers/run_diff_ik.py
CONFLICT (content): Merge conflict in source/standalone/tutorials/05_controllers/run_diff_ik.py
Auto-merging source/standalone/workflows/skrl/play.py
Automatic merge failed; fix conflicts and then commit the result.
Step 5: 解决冲突并提交合并
(如果你已经对原先Orbit做过修改,并且不希望这个存放新版本的分支保存那些更改,请往下看)
编辑有冲突的文件并手动解决冲突,然后标记这些文件为已解决。
# 编辑有冲突的文件并解决冲突
# 使用你喜欢的编辑器打开冲突文件并手动解决冲突
# 添加解决冲突后的文件
git add <冲突文件>
提交合并:
git commit -m "Merge new-upstream/main into isaac-lab with conflict resolution"
输出示例:
[isaac-lab 1a07fea] Merge new-upstream/main into isaac-lab with conflict resolution
Step 6: 推送新的branch到远程仓库
将新的branch推送到你fork的仓库中,以便在远程仓库中也有相应的分支。
git push origin isaac-lab
输出示例:
Enumerating objects: 63, done.
Counting objects: 100% (63/63), done.
Delta compression using up to 32 threads
Compressing objects: 100% (19/19), done.
Writing objects: 100% (27/27), 2.57 KiB | 1.28 MiB/s, done.
Total 27 (delta 12), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (12/12), completed with 12 local objects.
remote:
remote: Create a pull request for 'isaac-lab' on GitHub by visiting:
remote: https://github.com/Yannyehao/orbit/pull/new/isaac-lab
remote:
To github.com:Yannyehao/orbit.git
* [new branch] isaac-lab -> isaac-lab
如果你想要让你的isaac-lab
分支完全和new-upstream
的main
分支一致,可以通过以下步骤实现:
Step 1: 确保在isaac-lab
分支上
首先,确认你当前在isaac-lab
分支上。
git checkout isaac-lab
Step 2: 重置isaac-lab
分支到new-upstream/main
通过硬重置命令,将你的isaac-lab
分支重置为new-upstream/main
的状态。这个操作会覆盖所有当前分支上的更改,使其完全与new-upstream/main
一致。
git reset --hard new-upstream/main
Step 3: 推送更新后的isaac-lab
分支到你的远程仓库
将更新后的isaac-lab
分支推送到你的远程仓库,强制覆盖远程分支的内容。
git push origin isaac-lab --force
这样,你的isaac-lab
分支将与new-upstream/main
分支完全一致,而不会保留任何本地更改。
总结
通过上述步骤,我们可以成功地将新的Isaac Lab版本代码合并到fork仓库中的新branch,并解决冲突。以下是关键步骤的总结:
- 查看现有的远程仓库。
- 添加新的上游远程仓库。
- 从新的上游仓库获取最新版本。
- 创建新的branch并合并新的上游代码。
- 解决冲突并提交合并。
- 推送新的branch到远程仓库。
Isaac Lab(Orbit)好不好用是一方面,但是至少能看到他是在发展的,有变化就有机会。
非常的有品
以上