我们在unix中有git bare存储库,它具有相同名称的文件,仅在情况下有所不同.
例:
GRANT.sql
grant.sql
Run Code Online (Sandbox Code Playgroud)
当我们将裸存储库从unix克隆到windows框时,git status会将文件检测为已修改.工作树仅使用grant.sql加载,但git status比较grant.sql和GRANT.sql,并在工作树中显示已修改的文件.
我尝试使用core.ignorecase false,但结果是一样的.
有什么方法可以解决这个问题吗?
Jör*_*tag 41
Windows不区分大小写(更确切地说,保留大小写).根本没有可能的方法存在两个文件,其名称仅在大小写上有所不同:两个仅在大小写不同的文件名是相同的文件名.期.
因此,Git走在存储库中,一个接一个地检出一个文件,直到它碰到两个问题文件中的第一个.Git检查它,然后进一步了解它的业务,直到它到达第二个文件.再次,Git检查出来.从Windows的角度来看,文件名与第一个文件名相同,第一个文件只会被第二个文件覆盖.现在,Git认为第一个文件被改为与第二个文件具有相同的内容.
请注意,这与Git无关:如果你有一个tarball,一个zipfile或一个Subversion存储库,就会发生同样的情况.
如果您想在多个不同的平台上进行开发,您必须尊重这些平台的限制,并且您必须将自己局限于所支持的所有平台的最低标准.Windows支持ADS,Linux则不支持.OSX支持资源分叉,而Windows则不支持.BSD支持区分大小写,而Windows则不支持区分大小写.所以,你不能使用任何这些.就是那样子.
core.ignorecase
这不会帮助你,因为它处理完全相反的问题.
Gre*_*ill 33
我刚遇到类似的问题.在我的例子中,具有相似名称的两个文件仅在大小写不同的子目录中与Windows克隆无关.Git 1.7具有稀疏检出功能,允许您从工作副本中排除某些文件.要排除此目录:
git config core.sparsecheckout true
echo '*' >.git/info/sparse-checkout
echo '!unwanted_dir/' >>.git/info/sparse-checkout
git read-tree --reset -u HEAD
Run Code Online (Sandbox Code Playgroud)
在此之后,unwanted_dir/
子目录完全从我的工作副本中消失,Git继续正常处理其余文件.
如果你GRANT.sql
并grant.sql
没有在Windows克隆相关的,那么你可以添加自己的名字.git/info/sparse-checkout
,以明确排除这些文件.
我不确定这是否可能。Git 的ignorecase 处理单个文件的大小写差异。它无法解决 Windows 无法在一个目录中拥有两个仅大小写不同的文件名的问题。
FWIW,拥有两个相同的文件名但就其情况而言是一个非常糟糕的主意,即使在 Unix 上也是如此。
归档时间: |
|
查看次数: |
14024 次 |
最近记录: |