Перенос репозиториев git путем копирования

Перенос репозиториев git путем копирования

Я хотел перенести много репозиториев git со своей старой машины с Windows 7 (git 2.6.3.windows.1) на новую с Ubuntu 16.04 (git 2.7.4). Поскольку не все из них имели удаленные репозитории, я решил просто скопировать их. Это должно сработать. Однако все отслеживаемые файлы во всех репозиториях стали неподготовленными. На самом деле, возможно, некоторые из них не были зафиксированы до переноса репозиториев, но большинство из них были зафиксированы.

Если я посмотрю diffна файл, который был зафиксирован до передачи репозитория с помощью команды:

$git log -p -1 .gitignore
commit c566830cd3ffdf96556d29aee8dd1dc95d359872
Author: Pavel <[email protected]>
Date:   Fri May 13 18:07:25 2016 +0300

    Start

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2535fe
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+__pycache__
+.idea
+test

он возвращает ссылку на последний коммит, где этот файл был фактически зафиксирован. Коммит в примере выше является первым в репозитории.

Итак, по какой-то причине git отказывается распознавать зафиксированные файлы, но связывает их с последним зафиксированным файлом, в котором они были фактически зафиксированы.

Это проблема несовместимости разных версий git или платформ или что-то еще? И как решить эту проблему и не тормозить репозитории?

решение1

Это реальные изменения? Мне кажется, что git просто жалуется, что атрибуты файлов отличаются, что, безусловно, будет происходить между разными ОС (потому что у Windows и Linux разные файловые системы с разными метаданными).

А как насчет создания «голого» клона?

НА ОКНАХ

Перейдите в какую-нибудь папку, например:

cd c:\mycode

Локально клонируйте ваш репозиторий в эту папку с помощьюголыйопция, это означает, что НИЧЕГО не будет извлечено, только метаданные:

git clone --bare <path_of_your_repo>

Теперь заархивируйте полученную папку (например,"c:\mycode\<папка>.git") и вручную перенести его в Linux.

НА ЛИНУКС

В Linux сначала скопируйте заархивированную папку из Windows и распакуйте ее. Теперь клонируйте в какую-нибудь новую папку, например:

mkdir ~/mynewcode
cd ~/mynewcode
git clone /<where_you_copied_and_unzipped>/<folder>.git    <--- i.e. this is the folder copied/unzipped from Windows

И теперь вы можете изменить источник, если хотите удалить распакованную папку Windows.

git remote set-url origin <new_origin>

ИЛИ просто удалите его вообще:

git remote rm origin

решение2

А как насчет того, чтобы выложить их на github, а затем клонировать репозиторий на Ubuntu? (Я бы прокомментировал, но у меня пока нет 50 репутации)

Если вам нужна помощь, я могу предоставить дополнительные инструкции.

Связанный контент