git origin中不同大小写的重复文件(bitbucket)

时间:2013-08-01 16:57:19

标签: git

我正在尝试将文件从foobar.php重命名为FooBar.php,这在Git中是一个相当大的挑战。到目前为止,我发现我必须将ignorecase的git配置值设置为false(为什么它在Mac OS X上设置为true,无论如何?)。我已经设法在我的本地存储库中成功重命名这些文件,但在我将其推送到BitBucket之后,我在那里得到了FooBar.php以及foobar.php。我如何摆脱这些重复?感谢。

5 个答案:

答案 0 :(得分:28)

不区分大小写,保留大小写

您可能遇到的问题是,mac上的默认文件系统不区分大小写但保留大小写;在file.phpFile.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 上进行了以下更改:

enter image description here

我通过设置我想要的情况来解决它,在本例中为 constants.ts

移动了文件,所以 git 删除了大小写错误的文件,然后提交。

enter image description here

然后只需将文件移回:

enter image description here

现在一切都按预期进行。

enter image description here

答案 4 :(得分:0)

  1. 在 git 中启用区分大小写

    git config core.ignorecase true

  2. Git 删除文件(Git 现在会说 foobar.php 丢失并且 FooBar.php 被删除)

    git rm FooBar.php

  3. Git 提交文件“FooBar.php”(请确保只提交您不需要的文件——这里我将删除 caps 文件名文件)

  4. 推送更改并恢复丢失的文件。

  5. 恢复为不区分大小写

    git config core.ignorecase false