Git deposunda, bir dizini nasıl düzgün bir şekilde yeniden adlandırabilirim?


654

Ben istenen adla yeni bir dizine yeniden adlandırılması dizini kopyalamak ve çalışmalıdır düşünüyorum eski dizini silin ve git add, git commitve pushher şeyi. Ama bu en iyi yol mu?



5
Git söz konusu olduğunda, bir kopyala ve sil işlemi bir hamle ile aynı şeydir. Git hem (kopyala + sil) hem de (taşı) aynı şekilde kaydeder.
Dietrich Epp

Yanıtlar:


1182

Temel yeniden adlandırma (veya taşıma):

git mv <old name> <new name>

Büyük / küçük harfe duyarlı yeniden adlandırma — ör. dan casesensitivehiç CaseSensitive-Bir iki adım kullanmalısınız:

git mv casesensitive tmp
git mv tmp CaseSensitive

( Git'teki büyük / küçük harf duyarlılığı hakkında daha fazla bilgi… )

… Sonra kesinleştirme ve itme, bir git git deposunda bir dizini yeniden adlandırmanın en basit yolu olacaktır.


231
Eğer yeniden adlandırmak istediğiniz Ama eğer casesensitiveiçin CaseSensitive: Eğer bu şekilde yapabiliriz git mv casesensitive Tempsonra ve git mv Temp CaseSensitive
ViliusK

3
Tüm günlüğü ve istatistikleri kaydediyor mu?
orezvani

23
@ViliusK, büyük / küçük harfe duyarlı dizinlerle uğraşıyorsam, bulduğum herhangi bir kolay yol daha git rm -rf --cached path/to/your/directoriessonra yeniden ekleyin ve taahhüt edin
dtothefp

1
Ama neden GIT'in bir paket / dizin için isim değişikliği için uygun bir desteği yok? Neden ayrı bir klasör oluşturmam gerekiyor? Ne zaman bir paketin adını değiştirmek bir fark olarak almalı ve taahhüt ve itme sırasında ilgilenmek gerekir?
Ahmed

1
Bunun için çok teşekkürler. Benim için, önce git config core.ignorecase falsekomutları ard arda yürütmek ve çalıştırmak zorunda kaldım , ikinci bölüm için bir source is emptyhata alırdım .
Rika

107

Bu hatayı alırsanız: fatal: 'klasör adı' yeniden adlandırılamadı: Geçersiz argüman

Bunu dene:

git mv foldername tempname && git mv tempname folderName


8
Bu tam olarak bir dizinde bir vaka değişikliği yapmak için gerekli.
cjserio

'&&' jetonu bu sürümde geçerli bir ifade ayırıcısı değil. git sürüm 2.11.0.windows.
Tim Hardy

@Tim Hardy aynı zamanda iki ayrı komutlar olarak çalıştırılabilir git mv foldername tempnameve git mv tempname folderNameWindows üzerinde çalışması gerekir.
Larkeith

bu çalışmıyor ! Sonuçta 'tempname' klasörü içinde yeni 'FOLDERNAME' klasörü koyacağız
bahis

61

1. Klasörün adını eski klasörden yeni klasöre değiştirin

git mv oldfolder newfolder

2. Yeni klasör deponuzda zaten varsa ve onu geçersiz kılmak ve kullanmak istiyorsanız: - force

git mv -f oldfolder newfolder

Git mv ile yeniden adlandırdıktan sonra değişiklikleri dizine eklemeyi ve kaydetmeyi unutmayın.

3. Büyük / küçük harfe duyarlı olmayan dosya sistemlerinde klasör adını klasör adı olarak yeniden adlandırma

Normal bir mv komutu ile basit yeniden adlandırma (git mv değil) git'ten bir dosya mekanizması olarak tanınmaz. Aşağıdaki satırdaki gibi 'git mv' komutuyla denerseniz

git mv foldername folderName

Büyük / küçük harfe duyarlı olmayan bir dosya sistemi kullanıyorsanız, örneğin bir Mac kullanıyorsanız ve bunu büyük / küçük harfe duyarlı olacak şekilde yapılandırmadıysanız, bunun gibi bir hata mesajı alırsınız:

fatal: 'klasör adı' yeniden adlandırılamadı: Geçersiz argüman

Ve işte çalışması için şunları yapabilirsiniz: -

git mv foldername tempname && git mv tempname folderName

Bu, ilk önce klasörü tamamen farklı bir klasör adına yeniden adlandırarak yeniden adlandırma işlemini böler. Klasörü farklı kat adına yeniden adlandırdıktan sonra, klasör sonunda yeni folderName olarak yeniden adlandırılabilir. Bu 'git mv'lerden sonra tekrar değişiklikleri eklemeyi ve taahhüt etmeyi unutmayın. Bu muhtemelen güzel bir teknik olmasa da, mükemmel çalışıyor. Dosya sistemi hala harf durumlarındaki bir değişikliği tanımayacak, ancak git yeni bir klasör adına yeniden adlandırılması nedeniyle gitiyor ve istediğimiz budur :)


9

Dosya sistemini kullanarak dizini yeniden adlandırabilirsiniz. Ardından şunları yapabilirsiniz git rm <old directory>ve git add <new directory>( Yardım sayfası ) yapabilirsiniz. Sonra taahhüt edebilir ve itebilirsiniz.

Git, içeriğin aynı olduğunu ve yalnızca bir yeniden adlandırma işlemi olduğunu algılar ve geçmişte yeniden adlandırma girişi olarak görünür. Kullanmadan önce durumun böyle olup olmadığını kontrol edebilirsiniz.git status


12
hey, ama bu şekilde, tüm taahhüt tarihini kaybedeceğim.
ViliusK

1
-Follow bayrağını kullanırsanız saklayabilirsiniz.
Oleksi

Bir yerine iki komut ve bir bayrak eklemek zorunda? Bu herhangi bir şekilde git mv'den daha mı iyi?
antgel

4
@topper Hayır, git mv sadece rm + add için bir takma addır. Git mv kullanmak daha iyi bir çözümdür.
Oleksi

5
@topper Dosyayı taşımak için hangi yöntemi kullandığınızdan bağımsız olarak geçmişi görüntülemek için --follow komutunu kullanmanız gerekeceğini unutmayın.
Oleksi

3

Web Uygulaması'ndan yapamayacağınızı düşünüyorum, ancak Git İstemcisi'ndeki tüm klasörleri yeniden adlandırabilirsiniz, dosyalarınızı yeni yeniden adlandırılmış klasörlere taşıyacak, taahhütte bulunup uzak depoya gönderecektir.

Çok benzer bir sorunum vardı : Farklı klasörleri büyük harften küçük harfe (Abc -> abc gibi) yeniden adlandırmak zorunda kaldım, tüm klasörleri kukla bir isimle ('abc___' gibi) yeniden adlandırdım ve sonra uzak depoya karar verdim tüm klasörleri küçük harfle (abc gibi) orijinal isimle yeniden adlandırdım ve onları aldı!


0

İki adımda çözdüm. Mv komutunu kullanarak klasörü yeniden adlandırmak için haklara ihtiyacınız vardır, eğer hakkınız yoksa bu adımları takip edebilirsiniz. Vakalara duyarlı vakaları yeniden adlandırmak istediğinizi varsayalım.

Adım 1: Klasörü (büyük / küçük harf duyarlı) explorer'dan başka bir adla yeniden adlandırın. Örneğin, klasör1'e duyarlı büyük / küçük harfleri yeniden adlandır bu değişikliği yapar.

Adım 2: Bu yeni adlandırılmış klasörü (klasör1) beklenen büyük / küçük harfe duyarlı olarak yeniden adlandırın (Büyük / küçük harf duyarlı). Folder1'i Casesensitive olarak yeniden adlandırın. Bu değişikliği yapın.


0

Büyük / küçük harfe duyarlı yeniden adlandırma için, git mv somefolder someFolderdaha önce benim için çalıştı ama bugün bir nedenden dolayı olmadı. Yani geçici bir çözüm olarak ben yeni bir klasör oluşturdu temp, tüm içeriğini taşındı somefolderiçine temp, silinmiş somefolder, kararlı temp, daha sonra oluşturulan someFolder, tüm içeriğini taşındı tempiçine someFolder, silinmiş temp, işlenen ve itilmiş someFolderve işe yaradı! Git'te olduğu someFoldergibi görünür.


-16

Sadece klasörü yeniden adlandırın. git bir "içerik izleyici" dir, bu nedenle SHA1 karmaları aynıdır ve git, adını değiştirdiğinizi bilir. Değişen tek şey ağaç nesnesidir.

rm <directory>
git add .
git commit

1
Bu her zaman işe yaramaz. Kesinlikle benim için sth için işe yaramadı. % 20 dosya gibi ...
Tomáš Fejfar
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.