2016-05-02 2 views
0

У меня есть компьютер с ОС Windows и на том же ПК У меня есть виртуальная машина Lubuntu внутри проигрывателя VMWare.Как получить Linux VM (на хосте Windows) для доступа к рабочим файлам git в общем каталоге

Я делюсь своими папками Windows, чтобы увидеть их с виртуальной машины Lubunutu.

Моя проблема в том, что я клонировал Git repo в Windows (используя Tortoise Git), а затем попытаюсь получить к нему доступ из Lubuntu (используя Git из командной строки), все файлы выглядят модифицированными, хотя я их не изменил.

Я знаю, что причина в том, что Windows и Linux обрабатывают новые строки по-разному.

Мой вопрос в том, как я могу настроить свои установки Git в Windows и Lubuntu, чтобы у меня не было этой проблемы?

Update:

Как было предложено (Крейг Эсти), это, кажется, не быть CRLF проблемой. Я пытался клонировать репозиторий в моей Linux VM на общий каталог и получил следующее сообщение об ошибке:

fatal: 'origin' does not appear to be a git repository 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists.` 

У меня нет никаких проблем клонирования и тот же репозиторий на локальном диске виртуальной машины.

Любая идея, в чем причина?

Примечание. Основная причина, по которой я хочу это сделать, - это ограничить размер накопителя на ВМ и использовать как можно больше общий диск. Локальный диск моей виртуальной машины находится на SSD-накопителе, а общий диск - на гораздо большем жестком диске.

+2

AFAIK, символ новой строки вещь _not_ вопрос. git не изменяет '\ n' на' \ r \ n' в любой системе. Если текстовый файл имеет CRLF, он будет иметь его во всех системах. Скорее всего, есть проблемы с совместным использованием каталога _working_ таким образом. Возможно, вам повезло просто поделиться файлами _repo_. Но у меня было бы linux-хост репо [non-shared], и у Windows были бы оттяжки, и у каждого был отдельный частный рабочий каталог. Общий доступ [с самбой], похоже, имеет проблемы. Если вы _really_ хотите этого, создайте несколько тестовых репозиториев и создайте несколько файлов, чтобы сначала увидеть это в малом. –

+1

Скорее всего, это связано с временными отметками или разрешениями, чем проблемы CRLF. Или проблемы с блокировкой файлов с двумя разрозненными системами, пытающимися одновременно получить доступ к репозиторию или работающему директору из двух разных виртуальных машин, которые только полу-совместимы. –

+0

Можете ли вы попробовать начать с 'git config -global core.autocrlf false'? – VonC

ответ

1

Предположим, вы поместили репозиторий в общую папку Windows.

И mount (Mount shared folder on Ubuntu), который является общей папкой на Ubuntu, поэтому вы можете клонировать этот репозиторий. (Говоря о том, что вы не можете клонировать, это должна быть другая проблема. Я тестировал ее, хорошо для меня.)

Когда вы cd в этот репозиторий на этом монтировании, вы увидите, что все файлы изменены на Ubuntu, тогда это должно быть проблема EOL.

В Windows autocrlf является верно по умолчанию (предположим, что вы используете Git для Windows).

Когда вы клонируете репозиторий в Windows, файлы будут проверяться с помощью CRLF EOL.

Но, на Ubuntu autocrlf является ложным по умолчанию. Используя git в этом репозитории, который монтируется на Ubuntu, git ожидает, что EOL будет LF. Но EOL все еще CRLF. Вот почему git рассматривает все файлы как измененные на Ubuntu.

Чтобы устранить эту проблему, убедитесь, что обе ОС используют одно и то же значение autocrlf, или используя .gitattributes для управления EOL.

Например, используя ложное значение:

на окнах,

  1. Удалить все файлы в рабочее дерево этого хранилища.

    (Примечание. Если у вас есть локальные изменения, зафиксировать их первый)

  2. Run git config core.autocrlf false только для этого хранилища. Или

    • правой кнопкой мыши в этом хранилище, нажмите TortoiseGit -> Setting
    • В диалоговом окне Параметры перейдите Git узел, выберите local и снимите флажок в AutoCrlf
    • Применить изменения
  3. Выполните мерзавца перезагрузите, чтобы вернуть все файлы с правильными EOL.

    • Открыть TortoiseGit Log Сообщение диалоговое
    • правой кнопкой мыши на текущей ветви и выполнять Reset "<current branch name>" to this
    • Выберите вариант "Hard"

В Ubuntu, вы не должны видеть все файлы, измененные.

для использования .gitattributes:

* -crlf

Смежные вопросы