如何将git文件夹重命名为以前存在的文件夹名称

时间:2014-05-26 02:24:31

标签: git

我的计算机上有一个git存储库。

以前,我有一个名为final_project的文件夹,我曾经在上面工作过。但过了一段时间,我删除了整个文件夹并启动了一个新的文件夹start_project。现在我想将此 repository 文件夹重命名为final_project,并使用:

git mv start_project final_project

但是当我查看日志时,它会向我显示第一个项目的历史记录,这个项目不再需要,不适用。

我认为git需要另一个选项,即在移动时将start_project的日志覆盖到final_project的日志。可能吗?我的命令出了什么问题?

我使用以下命令查看我的项目日志:

git log folder_name

例如

~/Projects$ git log start_project

~/Projects/start_project/$ git log .

2 个答案:

答案 0 :(得分:5)

我测试了这个。我创建了一个名为foo的文件夹,然后将其删除,创建了另一个名为skadoosh的文件夹,然后将其重命名为foo

git log --oneline --graph --name-status
* 44fb01b Rename skadoosh to foo # <== Rename skadoosh to foo
| A     foo/derp.txt
| D     skadoosh/derp.txt
* c7af83c Add derp               # <== Create skadoosh
| A     skadoosh/derp.txt
* 344e215 Remove foo             # <== Delete foo
| D     foo/hello.txt
* cff7b45 Say goodbye
| M     foo/hello.txt
* 7fc9da5 Add hello.txt          # <== Create foo
  A     foo/hello.txt

这是 文件夹foo的日志:

git log --oneline --graph --name-status -- foo
* 44fb01b Rename skadoosh to foo   # Add "foo" (was skadoosh)
| A     foo/derp.txt
* 344e215 Remove foo               # Delete foo
| D     foo/hello.txt
* cff7b45 Say goodbye
| M     foo/hello.txt
* 7fc9da5 Add hello.txt
  A     foo/hello.txt

这是有道理的。 foo已在提交344e215中删除,然后&#34;已添加&#34;在提交44fb01b中再次(具有不同的内容)。通过删除原始文件/文件夹,然后使用新名称再次添加文件或文件夹来处理重命名文件或文件夹。

Git跟踪文件内容,而不是目录路径

为什么git log -- foo的历史记录包含原始文件夹foo/的历史记录?正如许多人已经指出的那样, Git不跟踪目录,它跟踪文件内容,因此Git不会将单个子文件夹视为自己的唯一对象,项目根目录树被视为唯一对象。

命令git log -- foo基本上表示返回名为foo/的目录树路径的历史记录,并且由于Git没有以任何特殊方式处理路径foo/, strong>它只返回所有内容的历史记录,这些内容曾被放置在名为 foo/的路径中。

我确定有一个更详细的技术说明涉及Git目录树对象,但我对低级管道或源代码不够熟悉,无法给出详细解释在这个时候。

另一种看待它的方式

这是另一种看待它的方式(它可能也更正确)。由于Git实际上并没有跟踪子目录,只有那些子目录中的内容,所以说只删除和添加文件更准确子目录,你实际上从未实际添加或删除子目录。

答案 1 :(得分:0)

也许你在这里有误解?使用git mv,您不必重命名存储库,而只需重命名存储库的文件夹或文件。如果要创建新存储库,则应使用git init final_project创建新存储库。 Git并不关心这个名字,所以你可以随时用mv重命名它。如果您想实际为存储库命名,可以在.git/description中执行此操作。

如果要重命名文件夹,git mv没有任何问题。 Git跟踪内容而不是文件/目录,因此您甚至可以使用mv shell命令以及git rm start_projectgit add final_project

要在重命名后获取单个文件的日志,您必须使用--follow选项,例如

git log --follow <filename>

如果您只是将目录名称提供给git log,则没有真正的&#34;内容&#34;除了目录名之外与它相关联,因此它只显示与该名称关联的日志。 --follow选项仅适用于单个文件,因此如果您想拥有干净的历史记录,则应认真重新考虑将每个项目放入一个存储库的工作流程。