Як правильно перейменувати каталог у сховищі Git?


652

Я думаю, що слід працювати над тим, щоб скопіювати каталог, який буде перейменований на новий каталог з потрібним ім'ям, і видалити старий каталог , і git add, git commitі pushвсе. Але це найкращий спосіб?



5
Що стосується Git, то копія та видалення - це те саме, що й хід. Git записуватиме (копіювання + видалення) та (переміщення) однаково.
Дітріх Епп

Відповіді:


1179

Основне перейменування (або переміщення):

git mv <old name> <new name>

Перейменування з урахуванням регістру - наприклад. від casesensitiveдо CaseSensitive-ви повинні використовувати два кроки:

git mv casesensitive tmp
git mv tmp CaseSensitive

( Більше про чутливість регістру в Git… )

… Слідом за цим виконуватиметься компіляція та натискання - це найпростіший спосіб перейменувати каталог у git repo.


231
Але якщо ви хочете перейменувати з casesensitiveна CaseSensitive, ви можете зробити так: git mv casesensitive Tempа потім git mv Temp CaseSensitive
ViliusK

3
Чи зберігає він весь журнал та статистику?
орезвані

23
@ViliusK, якщо ви маєте справу з каталогізацією регістру, будь-яким простим способом, який я знайшов, git rm -rf --cached path/to/your/directoriesто повторно додайте та
введіть

1
Але чому GIT не має належної підтримки для зміни імені для пакета / каталогу? Чому мені навіть потрібно створити окрему папку. Коли я міняю назву пакета, не можу це сприймати як різницю і піклуватися про нього під час фіксації та натискання?
Ахмед

1
Велике спасибі за це. Для мене мені довелося спочатку виконати, git config core.ignorecase falseа потім запустити команди послідовно, або в іншому випадку я отримав source is emptyпомилку.
Ріка

107

Якщо ви отримали цю помилку: fatal: перейменування "ім'я папки" не вдалося: недійсний аргумент

Спробуйте це:

git mv foldername tempname && git mv tempname folderName


8
Це саме те, що мені потрібно було змінити регістр у каталозі.
cjserio

Маркер "&&" не є дійсним роздільником операторів у цій версії. git версія 2.11.0.Windows.
Тім Харді

@Tim Hardy він також може бути запущений як дві окремі команди, git mv foldername tempnameі git mv tempname folderNameякі повинні працювати в Windows.
Ларкіт

це не працює! кінцевий результат помістить нову папку "folderName" у папку "tempname"
ставка

61

1. Змініть ім'я папки зі старої папки на нову

git mv oldfolder newfolder

2. Якщо NewFolder вже в вашому сховище і ви хочете , щоб скасувати його і використовувати: - сила

git mv -f oldfolder newfolder

Не забудьте додати зміни до індексу та зробити їх після перейменування на git mv.

3. Перейменування імені папки в папкуName на файлових системах, нечутливих до регістру

Просте перейменування за допомогою звичайної команди mv (не git mv) не буде розпізнано як зміна файлу з git. Якщо ви спробуєте це за допомогою команди 'git mv', як у наступному рядку

git mv foldername folderName

Якщо ви використовуєте файлову систему, нечутливу до регістру, наприклад, ви перебуваєте на Mac і не налаштували її на чутливість регістру, ви побачите повідомлення про помилку, як це:

fatal: не вдалося перейменувати "ім'я папки": недійсний аргумент

І ось що ви можете зробити для того, щоб це працювало: -

git mv foldername tempname && git mv tempname folderName

Це розділяє процес перейменування, спочатку перейменувавши папку на зовсім інше ім'я папки. Після перейменування його на інше ім'я папки остаточно можна перейменувати в нову папкуName. Після цих git mv, знову ж таки, не забудьте додати та внести зміни. Хоча це, мабуть, не красива техніка, вона працює чудово. Файлова система все одно не розпізнає зміну літерних букв, але git робить це через перейменування її на нову назву папки, і це все, що ми хотіли :)


9

Ви можете перейменувати каталог за допомогою файлової системи. Тоді ви можете зробити git rm <old directory>і git add <new directory>( Сторінка довідки ). Тоді ви можете скористатися і натиснути.

Git виявить, що вміст однаковий і що це лише операція з перейменуванням, і він з’явиться як запис перейменування в історії. Ви можете перевірити, чи це так, перш ніж скористатися комітетомgit status


12
ей, але таким чином я втрачу всю історію фіксації.
ViliusK

1
Ви можете зберегти його, якщо використовувати прапор -наступний.
Олексі

Дві команди замість однієї, і вам потрібно додати прапор? Це все-таки краще, ніж git mv?
мураха

4
@topper Ні, git mv - лише псевдонім для rm + add. Використання git mv - краще рішення.
Олексі

5
@topper Зверніть увагу, що вам все одно доведеться використовувати --follow, щоб переглянути історію незалежно від того, який метод ви використовуєте для переміщення файлу.
Олексі

3

З веб-додатку, я думаю, ви не можете, але ви можете перейменувати всі папки в Git Client, він перемістить ваші файли в нові перейменовані папки, ніж здійснить компіляцію та пересуне до віддаленого сховища.

У мене була дуже схожа проблема: мені довелося перейменовувати різні папки від великого до нижнього регістру (наприклад, Abc -> abc), я перейменував усі папки з манекеновим ім'ям (наприклад, 'abc___'), а потім перейшов у віддалений сховище, після що я перейменував усі папки на оригінальну назву з малої літери (як abc), і це взяло їх!


0

Я вирішив це в два кроки. Щоб перейменувати папку за допомогою команди mv, для цього потрібні права, якщо ви не маєте права, виконайте ці дії. Припустимо, ви хочете перейменувати регістр чутливості у Casesensitive.

Крок 1: Перейменуйте папку (чутливу до регістру) на щось інше з Провідника. наприклад, Перейменуйте чутливий регістр до папки1, вчинити цю зміну.

Крок 2: Перейменуйте цю щойно названу папку (папку1) на очікуване ім'я, яке чутливе до регістру (регістр чутливості), наприклад. Перейменуйте папку1 на «Casesensitive». Вчиніть цю зміну.


0

Для перейменування з урахуванням регістру git mv somefolder someFolderпрацював для мене раніше, але сьогодні чомусь цього не зробив. Тож як вирішуючи проблему, я створив нову папку temp, перемістив увесь вміст somefolderу temp, видалив somefolder, здійснив temp, потім створив someFolder, перемістив увесь вміст tempу someFolder, видалив temp, вчинив і натиснув, someFolderі воно спрацювало! Показує, як someFolderу git.


-16

Просто перейменуйте папку. git - це "трекер контенту", тому хеші SHA1 такі самі, і git знає, що ви перейменовуєте його. Єдине, що змінюється - це дерево-об’єкт.

rm <directory>
git add .
git commit

1
Це працює не завжди. Це, звичайно, не спрацювало для мене для чого-небудь. як 20% файлів ...
Томаш Фейфар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.