Ниже описываются команды bash, которые должны выполняться для воспроизведения наблюдаемого поведения. Хотя они прошли через msysgit
, я подозреваю, что результат должен быть похож на среду * nix.Почему «git clone» упаковывает базу данных объекта при передаче локального файла: /// url?
Настройка хранилище исходных
$ 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
Clone хранилище исходных текстов с использованием локального файла: /// 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)
Clone хранилище исходных текстов, используя локальный путь к файлу
$ cd ..
$ mkdir clonefrompath && cd clonefrompath
$ git clone /d:/temp/main
Cloning into 'main'...
done.
Согласно Wikipedia, URL-адрес файла с тройной косой чертой подразумевает местный ресурс.
Однако при клонировании по локальному адресу file:///
база данных объектов упакована перед передачей (копируется?). Это не тот случай, когда местоположение исходного репозитория выражается как локальный путь.
Почему git ведет себя по-разному, учитывая, что и исходный, и целевой репо размещены на localhost
?
Большое спасибо за этот ответ. К сожалению, использование 'git clone -l file: /// d:/temp/main' или' git clone --local file: /// d:/temp/main' все еще обрабатывает и передает пакетный файл. Можете ли вы воспроизвести это поведение? – nulltoken