在git中将目录重命名为“”时出现问题,此时“”小写“=True”

pjngdqdw  于 12个月前  发布在  Git
关注(0)|答案(4)|浏览(114)

当我输入git status时,我看到:

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   DIR/a
#

字符串
然而,在我的工作目录中,我看到这个文件实际上被称为dir/a(注意,是dir而不是DIR)。

**Question:**我想把这个修改过的a文件添加到暂存区并提交,但我希望它在我的工作目录中保持原样(显示为dir/a)- * 而不是git将其视为DIR/a *。我该怎么做?
重要提示:

不幸的是,我不能简单地使用git mv DIR/a dir/a,因为DIR/a实际上并不存在于工作树中。
目前,我的.git/config文件显示ingorecase = true,所以我知道我必须将其设置为false。然而,除了更改此标志外,什么也不做,现在显示的是git status

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   DIR/a
#
 # Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   dir/


我预料到了这一点,因为git只跟踪内容,而切换到git status会让git认为添加了一个新文件。不幸的是,git现在认为我有两个被修改的文件,而实际上我只有一个。我希望git status只显示dir/a(因为它在我的工作目录中)而不是DIR/a,与我最近刚做的a的区别相同。

补充说明

如果你想知道这种不稳定的情况是如何出现的,我已经成功地复制了我最初将目录从DIR重命名为dir时所犯的愚蠢错误。如果你认为这有助于解决这个问题,我很乐意做一个编辑,来揭示我是如何错误地让git如此困惑的。(这涉及到我不小心击中了mv而不是git mv,并且不知道ignorecase标志并将其保留为ignorecase=true)。

c6ubokkw

c6ubokkw1#

示例:如果您正在使用Mydir小写

git mv src/Mydir src/mydirs

git mv src/mydirs src/mydir

git commit -m "Rename folder Mydir to mydir"

字符串

np8igboo

np8igboo2#

您也可以在终端上执行以下命令,在Git配置中更改此区分大小写

git config core.ignorecase false

字符串

dpiehjr4

dpiehjr43#

我找到了一个解决方法。我不确定是否有更优雅的解决方案,但我已经测试过了,它确实有效。因为git仍然认为只有一个文件存在时存在两个文件,所以我必须完全复制目录,删除git跟踪的文件,然后将复制的目录mv回原始目录。
(1)提交dir中需要提交的任何文件。
(2)cp -r dir tempDir
(3)git add tempDir/
(4)git rm -r dir Dir
(5)git commit -m "Temporary rename of dir to tempDir"
(6)git mv tempDir mms
(7)git commit -m "Full rename from DIR to dir complete"

46scxncf

46scxncf4#

您可以从缓存中删除该目录并重新读取它:

git rm -r --cache DIR
mv DIR dir
git add dir

字符串

相关问题