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

相关问题