git-重命名文件夹和新文件

git-重命名文件夹和新文件,git,Git,我有一个git repo,包含文件夹a。在本地,我克隆了此repo,但随后决定重命名该文件夹: git mv A newfolder git add -u newfolder git commit -m "Folder rename" 现在,如果我在回购协议中修改A/stable,然后在本地执行git pull,我会得到: newfolder/stable 然而,如果我在回购协议中创建一个新文件,a/fresh,并在本地执行git pull,我最终会 A/fresh 而不是newfolder

我有一个git repo,包含文件夹
a
。在本地,我克隆了此repo,但随后决定重命名该文件夹:

git mv A newfolder
git add -u newfolder
git commit -m "Folder rename"
现在,如果我在回购协议中修改
A/stable
,然后在本地执行
git pull
,我会得到:

newfolder/stable
然而,如果我在回购协议中创建一个新文件,
a/fresh
,并在本地执行
git pull
,我最终会
A/fresh

而不是
newfolder/fresh
(也就是说,git创建了一个名为
a
的新文件夹,并将
fresh
文件放在那里)。为什么此重命名不适用于新文件?

Git将不知道
A
已被
newfolder
替换。如果您在远程repo中创建了
A/fresh
文件,然后将其提取/合并到本地repo中,它将别无选择,只能模拟远程结构并创建文件夹
A


这里的解决方案是在创建
新的
文件之前,将您的更改(
A
变成
newfolder
)推送到远程回购。因此,您将创建
newfolder/fresh
而不是
A/fresh

我不确定这是否完全正确:正如我在问题中提到的,它非常适用于重命名时已经存在的修改过的文件。请注意,负责处理重命名的是本地git(因此它实际上知道更改)。此外,推动更改不是一个选项:这是一个仅本地的更改,并且repo由其他人使用。@SteveD Right,在重命名时。你为什么期望事后会有这种行为?除非我完全误解了你的意图。好吧,我希望每个作为
A/foo
拉取的文件都被重命名为
newfolder/foo
@SteveD是的,这不是工作方式。我认为您最好的选择是创建一个
post merge
hook来完成文件系统的工作,将文件移动到
newfolder
并删除空的
a
文件夹。