Я хотел перенести много репозиториев 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 <mail@mail.com>
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 или платформ или что-то еще? И как решить эту проблему и не тормозить репо?

2 ответа2

2

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

Как насчет создания "голого" клона.

НА ОКНАХ

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

cd c:\mycode

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

git clone --bare <path_of_your_repo>

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

ON 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
0

Как насчет отправки их на github, а затем клонирования репо на вашем Ubuntu? (Прокомментировал бы, но у меня еще нет 50 повторений)

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .