删除和重命名文件夹后如何重新组织存储库?

时间:2009-12-15 12:46:01

标签: git

我有两个项目组成的解决方案 - ProjectName和ProjectName v2.0 一开始我没有使用版本控件,所以我复制了所有内容(复制了Project name并将其命名为ProjectName v2。 0)。过了一会儿我开始使用Git并添加了文件夹v2.0(Git add“ProjectName v2.0”)。 后来我删除了原始文件夹(ProjectName)并将ProjectName v2.0重命名为ProjectName。

现在,当我运行Git时,它会显示通知:

  

删除:....

有谁知道重组存储库的最佳方法是什么,以便在这种情况下不显示这些消息?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果从存储库中删除内容,则无法避免“已删除”消息: - )

你应该做的事情(尽管现在需要一些相当重要的树手术)将ProjectName中的所有文件替换为ProjectName v2.0中的文件。如果你在仍然使用v1时启动了v2.0,那么你需要在你开始2.0的时候进行分支。总而言之,尝试修复会相当尴尬,特别是如果提交需要拆分或重组,并且v1和v2之间没有明确的路径。

答案 1 :(得分:0)

如果您要从git历史记录中删除旧项目,请尝试通过filter-branch运行它: http://kernel.org/pub/software/scm/git/docs/git-filter-branch.html

  

允许您通过重写每个修订版中应用的自定义过滤器中提到的分支来重写git修订历史记录。这些过滤器可以修改每个树(例如,删除文件或对所有文件运行perl重写)或有关每个提交的信息。否则,将保留所有信息(包括原始提交时间或合并信息)

Github有一个演练,提供了如何从历史记录中删除文件的教程: http://github.com/guides/completely-remove-a-file-from-all-revisions

如果您不想从历史记录中删除项目,那么您将需要执行以下工作流程:

     
  • 分支当前代码
  •  
  • 将主分支(即主分支)的历史记录还原到您尝试清理的位置  
  • 使用`git rm`&删除旧项目。提交删除  
  • 使用`git mv`和&amp ;;将新项目移动到旧项目名称。提交
  •  
  • 现在,您可以合并您在工作流程开头创建的分支中所做的任何未完成的更改。

将来避免这种情况的一个好方法是使每次提交都小而且原子化(代表repo的一次逻辑更改),因此理解更改历史记录和操作分支变得非常容易。

答案 2 :(得分:0)

当您删除v1并重命名为v2时,您是否执行了'rm -r ProjectName'和'mv ProjectName2.0 ProjectName',或者您执行了'git rm -r ...'和'git mv ...'?

听起来像前者一样,在这种情况下你需要更新git告诉它你已经做了所有的改变。一种方法是做'git add ProjectName',然后是'git add -u'。这将确保更新索引,以便1:识别ProjectName中所有已添加或已删除的文件,以及2:识别整个存储库中的所有已修改或已删除文件。

或者,'git add -A'将确保索引反映工作目录的当前状态,除非您的.gitignore文件中有任何建议。

更新索引后,您可以正常提交。

如果您无法理解git中索引的概念,以及文件添加/删除与不具有该概念的更简单VCS的方式不同,您可以尝试阅读http://git.or.cz/gitwiki/WhatIsTheIndex或者,如果你有更多时间,http://tom.preston-werner.com/2009/05/19/the-git-parable.html。后者将索引称为“临时区域”,这是一个俗称的术语,因为很多人认为这是一个更具描述性的名称。