【问题标题】:How to change case of a file in git under cygwin?如何在cygwin下更改git中文件的大小写?
【发布时间】:2010-12-08 11:22:18
【问题描述】:

我们在区分大小写/不区分大小写的混合环境 (cywgin/linux) 中工作,今天有人通过重命名文件、将 S 更改为 s 对我们的工作流程造成了小破坏。这导致了跨分支的各种有趣的合并问题,老实说,没有人完全确定发生了什么。

在 git for cygwin 下更改文件大小写的最合适方法是什么?我必须强调我们区分大小写的,并且通常这样做是正确的 - 如果不是为了那个 S。

【问题讨论】:

  • 我从未在 cygwin 下使用过 git - git mv 是否没有正确签入重命名?

标签: git


【解决方案1】:

我刚刚遇到了类似的问题,我只想将目录“脚本”重命名为“脚本”。我目前在 Cygwin 工作,所以这并不容易。如果我尝试像在 GNU/Linux 中那样做,我会得到一个错误。

$ git mv foo Foo
fatal: renaming foo failed: Invalid argument

但是,我意识到我可以通过移动两次来绕过我认为是 Windows 的缺点,首先移动到一个不会冲突的名称,然后移动到实际想要的名称。

$ git mv foo Foo2 && git mv Foo2 Foo

我已经为这个更改隐藏了我的工作树,所以我可以单独提交它,显然没有考虑清楚,因为现在我移动的目录下的文件无法从存储合并到我的树。 :-/ 就我而言,这是一个小问题(为了安全起见,我在尝试此操作之前对树进行了 tar 压缩,所以我总是可以以强有力的非版本化方式来做这件事......:P)。

【讨论】:

    【解决方案2】:

    考虑了几分钟,git-mv 似乎很可能会做你需要做的事情。我相当确定它会尝试重命名(这可能是不区分大小写的操作系统上的无操作),然后将重命名添加到索引中。这应该基于参数,而不是实际文件 - 我在 builtin-mv.c 中看到 rename_cache_entry_at(pos, dst);

    我不确定这是否是您要问的内容的一部分,但关于您的分支混乱,以下是您可能想要采取的一般方法:

    • 将重命名修复提交给所有“最下方”的分支。这些可能是主题和维护分支 - 合并到其他分支中的分支,但从未将分支合并到它们中
    • 按照您的正常工作流程合并这些分支,修复重命名可能导致的任何冲突。
    • 鼓励大家尽快拉,以防问题有办法进一步传播。例如,有人可以处理重命名的文件,然后拉取,并以错误的方式修复重命名冲突,从而导致在推/拉时会重新产生问题的状态。

    【讨论】:

    • 对于发现这个的其他人,您将需要使用“git mv -f”来强制重命名,因为Cygwin会抱怨源和目标相同。
    【解决方案3】:

    我想指出,作为 后备,您可以操作索引(暂存区域)中的条目,您可以从那里使用“git commit”(而不是“git commit -a") 与 git update-index 管道(低级)命令。

    【讨论】:

      【解决方案4】:

      您的 cygwin 是否正确识别用户的组名?我无法识别组问题。你可能想检查这个chmod cannot change group permission on cygwin

      【讨论】:

        猜你喜欢
        • 2012-05-18
        • 2023-03-30
        • 1970-01-01
        • 2016-06-08
        相关资源
        最近更新 更多