我对git很新,有没有" git方式"这样做?
我希望同时提供相同代码的两个版本,这两个版本都与同一个项目相关。
说我有机器人的代码。我开始编程最小化以使其工作。然后,我为它添加了两个不同的功能,它们共享第一段代码,但彼此独立存在。我想要随时访问这两个。机器人有其他文件,这些文件对于每个功能都没有区别,但也必须是可更新的。
我已经明白,如果我只是分支,整个存储库都会分支,这意味着我总是必须对其他文件进行两次更改。这是对的吗?
最简单的方法是手动复制和重命名"最低限度"需要复制的文件,但这不会保留文件的历史记录,不是吗?
我觉得我错过了关于工作流程的一些重要信息。
答案 0 :(得分:0)
如果要单独更新“核心”代码和“机器人特定”代码,则可以使用子模块。为两个机器人制作两个项目(和git repos),将所有“核心”代码分成一个单独的git存储库,并将其作为git子模块添加到两个项目中。
然后,您就可以在编辑器或IDE中打开这两个项目,并更改其中的任何核心代码。更改后,在子模块中进行提交,推送到远程,然后在另一个项目中拉到远程。
cd project1/core
# saving changes made in core code of project1
git add .
git commit -m'added foo and bar'
git push
cd ..
#moving project1 to the new core's commit
git add core
git commit -m'updated core'
cd ../project2/core
#updating core at project 2
git pull
cd ..
# moving project2 to the new core's commit
git add core
git commit -m'updated core'
我强烈建议您在每次进行核心更改时编写单元测试并运行它们。由于您更改了多个项目中使用的代码,因此您有更多机会在每次引入的更改中破坏某些内容。
我已经明白,如果我只是分支,整个存储库都会分支,这意味着我总是要对其他文件进行两次更改。这是对的吗?
是的,确实如此。分支不是拥有两个独立版本代码的便捷方式。每次要共享更改时,都必须合并或重新绑定。
答案 1 :(得分:0)
如果要将现有文件复制到另一个文件并希望在稳定状态下更新这两个文件,一旦想要更新,最好分支出来并合并代码
$ git checkout -b new_branch
此代码将创建一个名为new_branch
的新分支,并将所有当前文件复制到new_branch
。之后所做的所有更改仅反映在new_branch
一旦你想更新prev_branch(之前你曾经工作过的地方。例如:master),你可以签到那个分支并合并你的代码
$ git checkout prev_branch
$ git merge new_branch
现在new_branch
所做的更改也会反映在prev_branch
答案 2 :(得分:0)
$ This is how you checkout new branch
# checkout new branch based upon the current branch
git checkout -b <new branch name>
如果我创建一个新分支,我是否必须复制该文件;或者,如果我创建新分支,它们会自动复制吗?
新分支是当前分支的 FULL 副本 为了理解为什么你需要知道git中的分支是什么。
What is branch in GIT?
强> Git中的一个分支只是一个轻量级可移动指向提交的指针 是关于它的简短而简单的帖子
git中的分支只是指向提交的指针 如下图所示(从上面提到的帖子中看到),所有分支都指向提交B +添加到它们的增量。
创建分支时,git会创建一个文件并将提交ID写入此文件。
我希望能够随时访问这两种方式。
这就是checkout -b
的作用 - 切换到新分支,允许您处理相同内容的多个“视图”。
在同一时间处理多个分支的另一种方法是使用worktree
。
git worktree
强> Git worktree于2007年在git repo的contrib
文件夹下引入,名为new-workdir
。
在 git V2.5 中,它在git中以worktree
公开,它允许您在不同文件夹中拥有相同存储库的多个实例。
例如:
# Open another "parallel" repository which allow you to work
# simultaneously on X several branches on the same time.
# You can have different branch checked out on each worktree
git worktree add <second path>
将在您的计算机上创建另一个文件夹,允许您同时在不同的分支上工作。