Visual Studio(2013)中的Propogate文件重命名为GIT作为GIT重命名?

Visual Studio(2013)中的Propogate文件重命名为GIT作为GIT重命名?,git,visual-studio,Git,Visual Studio,我们使用GIT和Visual Studio 2013(终极版+专业版)。解决方案和项目的代码在GIT中,只要我们在VisualStudio中重命名该文件,GIT就会将其视为 重命名前 重命名后(来自Visual Studio) 基本上,在VS中执行的重命名仍然需要一些手动工作。同样重要;当从IDE内部进行重构时,许多重命名都会发生,即类/成员/etc被重命名,所有引用都会发生更改。如果名称空间或类名更改,文件将被重命名 那么,是否有任何设置要切换,有任何工具要安装,有任何神要安抚,以便从Visu

我们使用GIT和Visual Studio 2013(终极版+专业版)。解决方案和项目的代码在GIT中,只要我们在VisualStudio中重命名该文件,GIT就会将其视为

重命名前 重命名后(来自Visual Studio) 基本上,在VS中执行的重命名仍然需要一些手动工作。同样重要;当从IDE内部进行重构时,许多重命名都会发生,即类/成员/etc被重命名,所有引用都会发生更改。如果名称空间或类名更改,文件将被重命名

那么,是否有任何设置要切换,有任何工具要安装,有任何神要安抚,以便从VisualStudio重命名也被映射为重命名到GIT(如GIT mv如何使其平滑)?

核心GIT(命令行应用程序)仅通过在暂存添加的文件和暂存删除的文件之间检测重命名来标识重命名

然而,VisualStudio不会将您在操作期间所做的更改暂存。相反,它将在提交时阶段化更改。造成这种情况的原因有很多,但主要原因是,暂存更改会将文件放在对象数据库中,并且每次保存都会花费极高的成本

您需要使用
git add
git rm
手动暂存更改,通过将添加的更改与重命名的更改进行比较,将一如既往地报告您的重命名


(请注意,Visual Studio—因为它不会在进行更改时暂存—会检查暂存和未暂存的文件以进行重命名检测。因此Visual Studio将在core git之前报告重命名。但是,当您暂存这些更改时,它们应在状态中显示相同的结果。)

AFAIK add+remove相当于git中的重命名/移动。它会自动计算出你做了什么。这是它比svn的一大优势,svn需要显式跟踪重命名。Visual Studio的可能副本使用与git相同的启发式方法来检测重命名。您是否看到
git status
将这些项报告为重命名,而VisualStudio没有?你能显示文件和一些提供更多细节的屏幕截图吗?@EdwardThomson:我们不使用VS来报告git状态。我们使用git(bash)或tortoisegit与git交互,但用于开发/重构等;正如其他人所指出的,Git中没有“重命名”,而是查看添加和删除的文件之间的相似性,并建议重命名发生在
Git status
Git diff
中。VisualStudio没有更改此行为,只是没有进行更改。
c:\temp\testCodeSnippets>git status
# On branch master
nothing to commit (working directory clean)
c:\temp\testCodeSnippets>git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    OldName.cs
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       NewName.cs
no changes added to commit (use "git add" and/or "git commit -a")
c:\temp\testCodeSnippets>git mv OldName.cs NewName.cs

c:\temp\testCodeSnippets>git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    OldName.cs -> NewName.cs
#