我正在尝试将文件从foobar.php重命名为FooBar.php,这在Git中是一个相当大的挑战。到目前为止,我发现我必须将ignorecase
的git配置值设置为false
(为什么它在Mac OS X上设置为true,无论如何?)。我已经设法在我的本地存储库中成功重命名这些文件,但在我将其推送到BitBucket之后,我在那里得到了FooBar.php
以及foobar.php
。我如何摆脱这些重复?感谢。
答案 0 :(得分:28)
您可能遇到的问题是,mac上的默认文件系统不区分大小写但保留大小写;在file.php
和File.php
同时存在的情况下,它们不可能被认为是同一个文件。
这很容易证明:
$ cd /tmp
$ mkdir example
$ cd example/
$ git init
Initialized empty Git repository in /private/tmp/so/.git/
$ touch readme
$ git add readme
$ git commit -m "adding readme"
[master (root-commit) 05fdf7d] adding readme
0 files changed
create mode 100644 readme
$ mv readme x
$ 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: readme
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# x
no changes added to commit (use "git add" and/or "git commit -a")
$ mv x README
$ git status
# On branch master
nothing to commit (working directory clean)
$ ls -l
total 0
-rw-r--r-- 1 andy wheel 0 Aug 1 19:38 README
在上面,文件现在名为README
,但根据git,文件readme
存在且未经修改。
因此,不是重命名文件(在不区分大小写的系统上存在问题),而是将其分为两步:
$ mv file.php /tmp
$ git rm file.php
$ git commit -m "deleting file"
$ git push
确保存储库中不需要的文件已消失。然后,将文件移回正确的位置并添加它。
$ mv /tmp/file.php File.php
$ git add File.php
$ git commit -m "adding File"
$ git push
答案 1 :(得分:4)
克隆/签出到区分大小写的文件系统中(在Mac OS X上,您只能制作一个区分大小写的磁盘映像),然后使用您不想要的大写的git rm
文件
至于为什么ignorecase
设置为true,documentation说:
<强>
core.ignorecase
强>
默认值为false,但git-clone(1)
或git-init(1)
将进行探测和设置core.ignorecase
如果在创建存储库时适当,则为true。
由于你的Mac可能有一个不区分大小写的文件系统(这是默认设置),git
会注意到并正确设置标志。
答案 2 :(得分:0)
一个简单快速的解决方法是来回重命名受影响的根文件夹:
示例:
mv src src-tmp
git add .
git commit 'step 1'
git push origin your-branch
mv src-tmp src
git add .
git commit 'step 2'
git push origin your-branch
这应该处理所有文件案例问题(如果在您的本地副本中修复)
答案 3 :(得分:0)
我在 Sourcetree 的 Windows 上进行了以下更改:
我通过设置我想要的情况来解决它,在本例中为 constants.ts
。
移动了文件,所以 git 删除了大小写错误的文件,然后提交。
然后只需将文件移回:
现在一切都按预期进行。
答案 4 :(得分:0)
在 git 中启用区分大小写
git config core.ignorecase true
Git 删除文件(Git 现在会说 foobar.php 丢失并且 FooBar.php 被删除)
git rm FooBar.php
Git 提交文件“FooBar.php”(请确保只提交您不需要的文件——这里我将删除 caps 文件名文件)
推送更改并恢复丢失的文件。
恢复为不区分大小写
git config core.ignorecase false