Починаючи з версії Git 2.5+ (ІІ квартал 2015 р.), Отримання єдиного комітету (без клонування повного репо-репортажу) є фактично можливим.
Див. Комісію 68ee628 від Фредріка Медлі ( moroten
) , 21 травня 2015 р.
(Об’єднав Хуніо С Хамано - gitster
- у комісії a9d3493 , 01 червня 2015 р.)
Тепер у вас є нова конфігурація (на стороні сервера)
uploadpack.allowReachableSHA1InWant
Дозволити upload-pack
приймати запит на отримання, який запитує об'єкт, який можна отримати з будь-якого відгуку. Однак зауважте, що обчислення доступності об'єкта обчислювально дорого.
За замовчуванням до false
.
Якщо ви поєднаєте цю конфігурацію на сервері з дрібним клоном ( git fetch --depth=1
), ви можете попросити провести один комікс (див t/t5516-fetch-push.sh
.:
git fetch --depth=1 ../testrepo/.git $SHA1
Ви можете скористатися git cat-file
командою, щоб побачити, що комісія була отримана:
git cat-file commit $SHA1
" git upload-pack
" що обслуговує " git fetch
" може бути запропоновано обслуговувати комітети, які не знаходяться на кінчику жодної посилання, доки вони доступні із списку із uploadpack.allowReachableSHA1InWant
змінною конфігурації.
Повна документація:
upload-pack
: необов'язково дозволити отримання доступного sha1
Якщо uploadpack.allowReachableSHA1InWant
параметр конфігурації встановлений на стороні сервера, " git fetch
" може зробити запит у рядку "хочу", який називає об'єкт, який не був рекламований (ймовірно, був отриманий поза діапазону або з підмодуля вказівника).
Обробляються лише об'єкти, доступні за підказками гілок, тобто об'єднання рекламованих гілок та гілок, прихованих від transfer.hideRefs
них.
Зауважте, що пов’язана ціна з необхідністю повернутися назад по історії, щоб перевірити доступність.
Ця функція може бути використана при отриманні вмісту певної комісії, для якої відомий sha1, без необхідності клонування всього сховища, особливо якщо використовується неглибокий збір .
Корисні випадки, наприклад
- сховища, що містять великі файли в історії,
- отримання лише необхідних даних для замовлення підмодуля,
- коли ви ділитесь sha1, не повідомляючи, якій саме гілці він належить та в Gerrit, якщо ви думаєте з точки зору комітів замість зміни чисел.
(Випадок Геррі вже вирішений, allowTipSHA1InWant
оскільки кожна зміна Герріта має посилання)
Git 2.6 (Q3 2015) покращить цю модель.
Див. Команду 2bc31d1 , фіксувати cc118a6 (28 липня 2015 р.) Джеффа Кінга ( peff
) .
(Об’єднав Хуніо С Хамано - gitster
- у комітеті 824a0be , 19 серпня 2015 р.)
refs
: підтримка негативна transfer.hideRefs
Якщо ви приховали ієрархію refs за допомогою transfer.hideRefs
config, не існує можливості згодом змінити цей конфігурацію, щоб "приховати" його.
Цей патч реалізує "негативне" приховування, яке спричиняє негайне позначення матчів як невідомі, навіть якщо інша відповідність ховала б його.
Ми дбаємо про те, щоб застосувати сірники в зворотному порядку, від того, як вони подаються нам на конфігураційній техніці, оскільки це дозволяє нашому звичайному роботі пріоритету конфігурації "останній виграш" (а записи .git/config
, наприклад, переважатимуть /etc/gitconfig
).
Тепер ви можете робити:
git config --system transfer.hideRefs refs/secret
git config transfer.hideRefs '!refs/secret/not-so-secret'
щоб приховати refs/secret
всі репости, за винятком одного публічного біта в одному конкретному репо.
Git 2.7 (листопад / грудень 2015 року) знову покращиться:
Див. Виконувати 948bfa2 , фіксувати 00b293e (05 листопада 2015 р.), Здійснювати 78a766a , вчиняти 92cab49 , вчиняти 92cab49 , вчиняти 92cab49 (03 листопада 2015 р.), Здійснювати 00b293e , вчиняти 00b293e (05 листопада 2015 р.) Та виконувати 92cab49 , вчиняти 92cab49 , вчиняти 92cab49 , виконувати 92cab49 (03 листопада 2015 р.) Лукас Флейшер ( lfos
) .
Допоможи: Ерік Саншайн ( sunshineco
) .
(Об'єднав Джефф Кінг - peff
- у комітеті dbba85e , 20 листопада 2015 р.)
config.txt
: документуйте семантику hideRefs
просторів імен
Наразі немає чіткого визначення того, як transfer.hideRefs
слід вести себе при встановленні простору імен.
Поясніть, що hideRefs
префікси збігаються з викресленими іменами в цьому випадку. Ось так hideRefs
обробляються шаблони в отриманому пакеті.
hidRefs: додайте підтримку для відповідності повних посилань
Окрім відповідності позбавленим рефлексу, тепер можна додати hideRefs
шаблони, проти яких повна (нерозгалужена) відповідність.
Для того, щоб розрізняти стриптовані та повні збіги, ці нові візерунки повинні бути встановлені за допомогою контуру ( ^
).
Звідси нова документація :
transfer.hideRefs:
Якщо використовується простір імен, префікс простору імен знімається з кожного посилання перед тим, як він буде узгоджений з transfer.hiderefs
шаблонами.
Наприклад, якщо refs/heads/master
вказано в transfer.hideRefs
і поточний простір імен foo
, а потім refs/namespaces/foo/refs/heads/master
опускається від реклами , але refs/heads/master
і
refs/namespaces/bar/refs/heads/master
по - , як і раніше рекламували в якості так званих «мати» лінії.
Щоб відповідати рефлексу перед знімком, додайте ^
перед назвою посилання. Якщо ви комбінуєте !
і ^
, !
потрібно вказати спочатку.
R .. в коментарях згадує конфігурацію uploadpack.allowAnySHA1InWant
, яка дозволяє upload-pack
прийняти fetch
запит, який взагалі запитує будь-який об’єкт. (За замовчуванням false
).
Див. Комісію f8edeaa (листопад 2016, Git v2.11.1) від Девіда "novalis" Тернера ( novalis
) :
upload-pack
: необов'язково дозволити отримання будь-якого ша1
Здається, трохи нерозумно перевірити реабілітаційність у випадку, коли ми довіряємо користувачеві отримати доступ до абсолютно всього репозиторію.
Крім того, це сильно поширюється в розподіленій системі - можливо, один сервер рекламує відмову, але з тих пір інший силовий поштовх до цього списку, і, можливо, два запити HTTP спрямовуються на ці різні сервери.