Змініть розташування каталогу каталогів Git.


200

Якщо у Git / Github для Windows є репозиторій із цим каталогом: C:\dir1\dir2що мені потрібно зробити, щоб перемістити файли репо C:\dir1? Я, очевидно, фізично можу скопіювати та вставити файли, але що мені потрібно робити на стороні Git?

У мене є репо на GitHub, і я використовую Git Bash і GitHub для Windows.


1
Подивіться на цю відповідь , це те ж саме для переходу до іншої папки чи іншого комп’ютера.
rekenerd

Відповіді:


236

Просто скопіюйте весь вміст робочого каталогу (включаючи прихований .gitкаталог). Це перемістить весь робочий каталог у новий каталог і не вплине на віддалений сховище на GitHub.

Якщо ви використовуєте GitHub для Windows, ви можете перемістити сховище, використовуючи описаний вище метод. Однак при натисканні на сховище в додатку він не зможе його знайти. Щоб вирішити це, просто натисніть на синє коло з допомогою !, виберіть Find it і перейдіть до нового каталогу.


3
Але як щодо того, як GitHub For Windows відстежує локальну репо? З цього боку має бути якийсь конфігуратор.

3
Коли я це робив у Windows, це змусило мене створити нове репо.
472084

1
@Jleagle, вони, можливо, змінили його з моменту опублікування цієї відповіді. Я перегляну і при необхідності оновлю відповідь.
ctor

2
Не слід просити вас створити нове репо: якщо це сталося, ви, очевидно, пропустили файл git (можливо, прихований). Сталося зі мною, і коли я спробував ще раз, я помітив, що я щось пропустив.
Хуан

1
Я на Він. Після того як я перемістив папку вручну на нове місце, тоді я знову відкрив додаток Git GUI та перемістив папку проектів вручну там. Так працює для мене.
kuncevic.dev

42

Я не впевнений у питанні, тому ось дві відповіді:

Якщо ви хочете перемістити сховище:

Просто скопіюйте весь сховище (разом із його .gitкаталогом).

У структурі немає абсолютного шляху .gitі ніщо не заважає їй переміщуватися, тому після переїзду вам нічого не робити. Усі посилання на github (див. В .git/config) працюватимуть як раніше.

Якщо ви хочете перемістити файли всередині сховища:

Просто перемістіть файли. Потім додайте зміни, перелічені в git status. Наступний commitзробить необхідне. Ви будете раді дізнатись, що жоден файл не буде дублюватися: переміщення файлу в git майже не коштує.


1
Але як щодо того, як GitHub For Windows відстежує локальну репо? З цього боку має бути якийсь конфігуратор.

@ user596075 це в .gitкаталозі.
OrangeDog

24

Якщо ви використовуєте GitHub Desktop , виконайте такі дії:

  1. Закрийте GitHub Desktopта всі інші програми з відкритими файлами до поточного шляху до каталогу.
  2. Перемістіть весь каталог, як було зазначено вище, до нового місця розташування каталогу.
  3. Відкрийте GitHub Desktopі натисніть на синю (!) Піктограму "сховище не знайдено". Потім відкриється діалогове вікно, і ви побачите кнопку "Знайти ...", яка відкриє спливаюче вікно, що дозволяє направити його шлях на нове місце.

8

Хоча питання стосується Git для Windows, це, здається, є найкращим результатом навіть під час пошуку засобів Visual Studio Tools для Git (розширення у VS 2012, підтримка в VS 2013).

Використовуючи наведені вище рішення в якості посібника, я визначив, що Visual Studio Git Tools робить переміщення репостів (або навіть усієї структури каталогів для всіх репостів) локально дуже просто.

1) Закрийте Visual Studio. 2) Перемістіть папки Repo на нове місце. 3) Відкрити візуальну студію. Відкрийте Провідник команди. Перейдіть до перегляду "Підключення" (значок підключення вгорі). 3a) Якщо Repos все ще показує старий шлях, натисніть «Оновити», щоб примусити оновити. 4) Репости, переміщені локально, більше не повинні відображатися у " Місцевих сховищах Git ". 5) Клацніть Додати (не новий або клонувати) та виберіть папку repo, яку потрібно додати.

На кроці 5 ви дійсно просто надаєте шлях пошуку, і пошук автоматично включає всі папки. Якщо у вас є декілька репостів, організованих під одним коренем (незалежні репозиції мають лише одну батьківську папку), то вибір батьківського поля включає всі репости, знайдені нижче цього.

Приклад: E: \ Repos \ RepoA E: \ Repos \ RepoB E: \ Repos \ RepoC

У програмі Visual Studio Team Explorer [Додати]> "E: \ Repos \"> [Додати] поверне всі три до локальних сховищ.


6

Хоча всі попередні відповіді, схоже, говорять про те, що ви можете просто перемістити каталог і немає абсолютних шляхів у структурі .git. Я вважав це неправдивим, коли використовував git від Cygwin.

Коли я перемістив свій git repo (насправді я відновив його із резервної копії, але на іншому диску, оскільки моя структура диска змінилася на моїй новій системі). Я отримав повідомлення про помилку на кшталт

fatal: Invalid path '<part_of_the_original_repo_path>': No such file or directory

Я використовував grep, щоб виявити, що в моєму .git / config-файлі в розділі [core] є змінною робочого дерева, яка містить абсолютний шлях мого git repo. Змінення цього вирішило проблему для мене.


4

Я використовую плагін Visual Studio git, і у мене є веб-сайти, які працюють на IIS, які я хотів перемістити. Простий спосіб, який працював для мене:

  1. Закрити Visual Studio.

  2. Переміщення коду (включаючи папку git тощо)

  3. Клацніть на файл рішення з нового місця

Це оновлює відображення нового місця, використовуючи наявні локальні файли git, які були переміщені. Як тільки я повернувся у Visual Studio, у моєму вікні Team Explorer було показано репост у новому місці.


2

Я використовую Github Desktop для Windows, і я хотів перемістити місце розташування сховища. Немає проблем, якщо перемістити каталог і вибрати нове місце в програмному забезпеченні. Але якщо ви встановите поганий каталог, ви отримуєте фатальну помилку і не маєте другого шансу зробити переїзд до хорошого. Тож, щоб полагодити це. Ви повинні скопіювати файли проектів у поганий каталог, зробити його відновленням Github Desktop, після чого ви можете знову перемістити проект в іншу папку та зробити переїзд у програмне забезпечення. Для цього не потрібно закривати Github Desktop, він перевірятиме папки в прямому ефірі.

Сподіваючись, що це комусь допоможе.


1

Це для мене не вийшло. Я перемістив репо з (наприклад) c: \ project1 \ в c: \ repo \ project1 \, і Git для windows не відображає змін.

git status показує помилку, оскільки один з підмодулів "не є сховищем git" і показує старий шлях. наприклад (імена змінені для захисту IP)

fatal: Не сховище git: C: /project1/.git/modules/subproject/subproject2 fatal: у підпроекті підмодуля не вдалося отримати статус git --porcelain

Мені довелося вручну редагувати .git-файли в підмодулях, щоб вказати на правильний відносний шлях до репо-підмодуля (у головному каталозі .git / модулів репо).


1

Звіт з майбутнього: квітень 2018 року.

Я хотів нормалізувати локальні репости на моєму Mac та моїх Windows, які опинилися в різних локальних папках.

Клієнт Windows 10 змусив мене пройти процедуру "Не можу знайти"> "Знайти", нудна, але не страшна. Також потрібно оновити локальний "Шлях клонування" в Опціях для подальшого використання.

Коли я консолідував папки mac, клієнт Github просто знайшов їх знову - мені нічого не потрібно було робити!


0

Щоб встановити локальний шлях за замовчуванням до ваших сховищ щоразу, коли ви клонуєте одне з них, потрібно лише один раз клонувати сховище та встановити Localpath: / your-path, а потім github автоматично визначить цей шлях як ваш за замовчуванням.


Схоже, це не дає відповіді на початкове запитання - можливо, ви можете пояснити, як ваша відповідь щось додає до вже прийнятої відповіді? Дякую.
rwp

0

Більш дієвим підходом на Git було б внесення змін до вашої локальної копії за допомогою cdкопіювання та вставлення, а потім переміщення цих змін із локального у віддалене сховище.

Якщо ви спробуєте перевірити стан місцевого репо, він може відобразити "незавершені зміни", які є фактично переселеними файлами. Щоб насильно натиснути на ці зміни, потрібно заздалегідь відредагувати ці файли / каталоги

$ git add -A
#And commiting them
$ git commit -m "Relocating image demo files"
#And finally, push
$ git push -u local_repo -f HEAD:master

Сподіваюся, це допомагає.

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