当我输入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
)。
4条答案
按热度按时间c6ubokkw1#
示例:如果您正在使用Mydir小写
字符串
np8igboo2#
您也可以在终端上执行以下命令,在Git配置中更改此区分大小写:
字符串
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"
个46scxncf4#
您可以从缓存中删除该目录并重新读取它:
字符串