Windows'da bir dosyanın durumu değiştirilsin mi?


209

Git kontrollü kod tabanımızda yeniden adlandırmak istediğim birkaç dosya var. Özellikle, sadece dosyanın durumunu değiştirmek istiyorum, böylece bu , örneğin sourceCode.javaolur SourceCode.java. Yakalama: Bir Windows kutusundayım ve dosya sistemi bunların aynı dosya adı olduğunu düşünüyor.

Windows ve Git'in bu değişikliği tanımasını ve teslim almasını nasıl sağlayabilirim?


3
Git 2.0.1+ (Haziran 2014) tarihinden bu yana, bir basit git mvçalışmalıdır ( stackoverflow.com/a/24979063/6309 ). Windows'da bile.
VonC

Yanıtlar:


337

Nasıl yapılacağı hakkında daha fazla ipucu için buraya bir göz atın:

Git durumunda değişiklikleri yoksaymak nasıl yapılır?

Veya:

git mv -f name.java Name.java

8
Bir yana, bu bir FAT dosya sisteminde çalışmaz. Başparmak sürücüsünde bazı proje kodları taşıyorum ve vaka değişiklikleri gerçek bir acı.
asm

1
Bu benim için NTFS sistemi ve Windows 10'da işe yaramadı
Roboblob

1
Bu kesinlikle doğru bir yoldur, ancak çok fazla dosyayı yeniden adlandırmanız gerekiyorsa, sıkıcı olabilir. Dosya sisteminde zaten bir şekilde yeniden adlandırıldınız ve sadece bu değişiklikleri yapmak istiyorsanız, bazı üst klasörleri yeniden adlandırabilir git add, yeni yeniden adlandırılan klasörden birini yapabilir, KOMUT ETMEYİN, klasör adını olması gerektiği şekilde geri değiştirebilirsiniz. , git addtekrar ve sonra taahhüt.
Okonomiyaki3000

NTFS ve Windows 7 üzerinde çalışır.
Hans Goldman

Bunu toplu olarak yapmak mümkün mü? ör. powershell ile,Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
killjoy

49

Bir FAT dosya sisteminde iseniz, tek seçiminiz iki aşamalı bir yeniden adlandırma yapmaktır:

  1. Şununla yeniden adlandır sourceCode.java:anything.you.like
  2. Şununla yeniden adlandır anything.you.like:SourceCode.java

Perforce'yi kullandığımız günlerde tam olarak bu problemimiz vardı ve bu, ortaya koyabileceğimiz tek çözümdü.


13
Diğerleri için sadece bir not:
Arada

29

Aşağıdaki adımlar, Windows'daki davayı değiştirmeme izin verdi:

  • Ekle ignorecase = falseiçin [core]de .git/config;
  • Yeniden adlandıracağınız dosyaları proje dizininizin dışına taşıyın;
  • Silmeleri dizine ekleyin;
  • Tüm dosyaları orijinal konumlarına geri taşıyın ve dosyaların ve / veya dizinlerin durumunu değiştirin;
  • Tüm "yeni" dosyaları dizine ekleyin;
  • ignorecase = falseİlk adımda eklenenleri kaldırın .

Bu şekilde, yeniden adlandırma içeren tek bir işleminiz olur ve örneğin tüm bir dizini değiştirmeyi kolaylaştırır.


5
Banyo genel ve yerel ayarları için yapın: $ gti config - global core.ignorecase false $ gti config core.ignorecase false
Roman Ivanov

6

Dikkatli ol. Bunu yapmak birleştirilmesi imkansız değişikliklere yol açabilir. Git, Windows'ta birleştirilirken karıştırılır, çünkü eski Büyük Harf adının ve yeni küçük harf adının aynı dosya olup olmadığına karar veremez (Git için değil, dosya sistemi için). Birleştirmek için, birleştirmeden önce dosyaları silmek gibi bazı manuel geçici çözümler yapmanız gerekir.

Aynı adda ancak farklı bir vakadaki dosyalarda Git rebase sorununa bakın

Bu sorunun projenizde alışılmadık bir şekilde adlandırılmış bir dosyaya sahip olmaktan daha kötü olup olmadığından emin değilim, ancak sonunda birleştirilmesi gereken çok sayıda şubesi olan çok sayıda kullanıcı olup olmadığını bilmeye değer.


Orta ve büyük ölçekli projelerdeki alışılmadık şekilde adlandırılmış dosyalar, birden çok platform için geliştirirken sorunlara neden olduğu için her zaman kaçınılmalıdır (böyle bir şeyi düzeltmeyi geciktirmek, sorunları düzeltmeden daha ciddi hale getirecektir). Bazen pencerelerde gelişiyorsunuz, ancak bir linux yapısı yapmanız gerekiyor ve pencerelerde iyi çalışacak bir ekleme, yapının linux üzerinde kırılmasına neden oluyor.
Griffork

3

Bence basit bir yol eksik. Bunu tek bir dosya, belirli bir dizin veya hatta tüm depo için yapabilirsiniz:

git rm --cached <file name or directory>
git add <file name or directory>

Alt dizinleri de etkilemek istiyorsanız, -rbayrağı kullanmanız gerekir :

git rm -r --cached <directory>
git add <directory>

Gerçekten en basit olanı.
ranu

Git tarafından tamamen yeni bir dosya olarak ayarlandığından, dosyanın tüm geçmişini kaybeder.
Alejandro

@Alejandro Söylediklerin yanlış. Ben sadece test ve git herhangi bir sorun olmadan yeniden adlandırma kabul etti. Diğer durumlarda olduğu gibi, dosya dizinde kaldırıldı / yeni olarak gösterilir, ancak işlem yapılırken git'in yeniden adlandırıldığını fark eder.
Nils-o-mat

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.