Почему "git clone" упаковывает базу данных объектов при передаче локального файла: /// url? - PullRequest
3 голосов
/ 17 января 2012

Далее описываются команды bash, которые должны быть выполнены для воспроизведения наблюдаемого поведения.Хотя они проходили через msysgit, я подозреваю, что в среде * nix результат должен быть похожим.

Настройка исходного репозитория

$ mkdir main && cd main
$ git init .
Initialized empty Git repository in d:/temp/main/.git/
$ echo a > a.txt
$ git add . && git commit -m "Initial commit"
[master (root-commit) e1ec355] Initial commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 a.txt

Клонировать исходный репозиторий, используя локальный файл: /// url

$ cd ..
$ mkdir clonefromfileurl && cd clonefromfileurl
$ git clone file:///d:/temp/main
Cloning into 'main'...
remote: Counting objects: 3, done.
Receiving objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)

Клонировать исходный репозиторий, используя локальный путь к файлу

$ cd ..
$ mkdir clonefrompath && cd clonefrompath
$ git clone /d:/temp/main
Cloning into 'main'...
done.

Согласно Википедии , файл URL с тройной косой чертой подразумевает локальный ресурс.

Однако при клонировании через локальный URL file:/// база данных объектов перед передачей упаковывается (скопировал?).Это не тот случай, когда местоположение исходного репозитория выражается в виде локального пути.

Почему git ведет себя по-разному, учитывая, что и исходное, и целевое репо размещены на localhost?

1 Ответ

2 голосов
/ 17 января 2012

Из руководства пользователя git clone: ​​

Для локальных репозиториев, также поддерживаемых git, могут использоваться следующие синтаксисы:

  • / путь / к / repo.git /
  • Файл: ///path/to/repo.git/

Эти два синтаксиса в основном эквивалентны, за исключением того, что в первом подразумевается опция --local.

Таким образом, когда вы используете file:///, это не подразумевает клон --local, который вы должны явно добавить.

...