use*_*428 5 git production-environment git-clone
在开发应用程序的过程中,我希望在某个方面能够单独复制我的工作,以便进行多项更改.这些变化并不意味着承诺!它只是在玩耍,尝试各种可能性.
这样做的" 最佳 "方式是什么?我找到了以下可能性,但是想得到那些对我有更多git经验的人的建议:
git clone将存储库的副本放到不同的目录中,并使用它来玩.cp -r把我当前的git工作目录改为新的.在情况(1)中,git知道克隆,rebase如果我真的想要,我可以稍后,但我不太可能做到这一点.
在这种情况下,有什么我应该知道的,这使解决方案(1)或(2)更好吗?或者有更好的方法吗?
使用克隆/副本
使用分支
你写
我想在某一时刻拥有一份我的作品的单独副本,以便尝试一些更改。[...] 做这个的最好方式是什么?
您还在评论中写道,您可能会在原始作品及其“副本”之间来回切换,而不会对后者进行任何更改。
在这里,您有不同的可能方法;让我们先回顾一下您的两个建议,然后探讨第三种可能性。为了修正想法,我假设您的存储库位于名为 的目录中main。
git clone将存储库的副本复制到不同的目录中,并使用它来进行操作。正如您所建议的,您可以将 的克隆生成main到名为 的目录中exp,
git clone <path-to-main> <path-to-exp>
Run Code Online (Sandbox Code Playgroud)
并进行你的疯狂实验exp。该main存储库将是exp“上游”,即在名称exp下列main为其遥控器之一origin。因此,如果您在 中进行了更多提交main并希望了解exp最新情况main,则可以从 获取main,exp然后在后者中合并或变基。
这种方法的主要问题是空间效率低下:因为克隆携带了原始存储库的整个历史记录,所以您将在磁盘上获得大量重复文件。这可能是也可能不是问题,具体取决于原始存储库的大小,但这是需要考虑的事情。
cp -r我当前的 git 工作目录到新的工作目录这本质上就像克隆main,但是,除非您手动添加main为 的远程exp,否则您将无法从main到获取exp。与第一种方法相比,我认为这种方法没有任何优势(也许,它不涉及意外将东西从expto推送的风险main)。
exp第三种方法是直接在您的存储库中创建一个新分支(我们称之为) main,
git branch exp
Run Code Online (Sandbox Code Playgroud)
一探究竟,
git checkout exp
Run Code Online (Sandbox Code Playgroud)
并在那里进行你的实验。与其他两种方法相比,这种方法的主要优点是空间效率:Git 分支很便宜,因为创建新分支不涉及任何文件复制。
但是,如果您在签出时进行更改exp但没有提交它们,Git 会认为您的工作目录“不干净”,并且不允许您切换回master分支,直到您纠正这种情况。清理存储库的一种可能性是通过运行来存储未提交的更改
# while on exp, if there are uncommitted changes
git stash save
Run Code Online (Sandbox Code Playgroud)
然后,您可以切换回master,进行一些更改,提交它们,切换回exp,并通过运行检索隐藏的更改
git stash pop
Run Code Online (Sandbox Code Playgroud)
但是,如果涉及大量存储(save和),您可能会发现此工作流程过于乏味且难以操作......pop
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |