我正在尝试将文件从foobar.php重命名为FooBar.php,这在Git中是一个相当大的挑战.到目前为止,我发现我不得不设立的混帐配置值ignorecase
,以false
(为什么它被设置为true,在Mac OS X,反正?).我已经设法在我的本地存储库中成功地重命名了这些文件,但在我将它推送到BitBucket之后我就得到了FooBar.php
那么好foobar.php
.我如何摆脱这些重复?谢谢.
AD7*_*six 33
您可能遇到的问题是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
Run Code Online (Sandbox Code Playgroud)
在上面,文件现在README
根据git 命名该文件readme
存在且未经修改.
因此,不是重命名文件(在不区分大小写的系统上有问题),而是执行以下两个步骤:
$ mv file.php /tmp
$ git rm file.php
$ git commit -m "deleting file"
$ git push
Run Code Online (Sandbox Code Playgroud)
确保不需要的文件从存储库中消失.然后,将文件移回正确的位置并添加它.
$ mv /tmp/file.php File.php
$ git add File.php
$ git commit -m "adding File"
$ git push
Run Code Online (Sandbox Code Playgroud)
Tho*_*asH 15
由于我在目录级别(而不是文件级别)上遇到此问题,这里是应用于文件夹的配方(这是在Windows上,git v2.9.2).
git mv Foobar Foobar.tmp
- 您将获得一组重命名的文件,还有一组已删除的文件及其相应的未跟踪文件.git add .
- 暂存所有已删除/未删除的文件.
git commit -m"syncing Foo[Bb]ar into temp. folder"
- 承诺临时.夹.git mv Foobar.tmp FooBar
- 现在从temp重命名.到所需的名字.git commit -m"moving FooBar into place"
- 提交目标名称.git push
- 现在Bitbucket应该显示一个子目录FooBar.git config [--global] core.ignorecase false
- 永远不要再遇到这个问题.克隆/签出到区分大小写的文件系统(在 Mac OS X 上,您只需制作区分大小写的磁盘映像即可),然后复制git rm
您不想要的大写字母的文件。
至于为什么ignorecase
设置为true,文档说:
core.ignorecase
默认值为 false,除非git-clone(1)
orgit-init(1)
将core.ignorecase
在创建存储库时探测并在适当时设置为 true。
由于您的 Mac 可能具有不区分大小写的文件系统(这是默认设置),因此您git
会注意到这一点并适当地设置标志。
归档时间: |
|
查看次数: |
15126 次 |
最近记录: |