Скопіюйте git repo без історії


200

Наразі у мене є приватне сховище на github, яке я хочу оприлюднити. Однак деякі початкові комісії містять інформацію, яку я не хочу оприлюднювати (жорсткі коди тощо).

Який найпростіший шлях для оприлюднення останніх комісій (я не дуже потребую або хочу, щоб попередні зобов’язання в загальнодоступному сховищі) не включали частину чи всю історію комісій?


Чому ви просто не створите новий сховище?
— Стефан

2
@Stephan Я чудово створюю нове сховище, але як я перехоплюю останнє стан зі старого сховища і призначаю його до нового?
— Rafe

19
ви можете просто видалити .git папку і знову зробити git init у папці, де є ваші джерела
— Stephan

2
Видалення папки .git зробить ваші два сховища несумісними, ви не зможете об'єднатись з одного в інший
— Арнольд Роа,

Ви не можете його відновити? Ви буквально просто розминаєте всі старі зобов’язання і потім (змушуєте) натискати.
— xaxxon

Відповіді:


321

Ви можете обмежити глибину історії під час клонування :

--depth <depth>
Create a shallow clone with a history truncated to the specified 
number of revisions.

Використовуйте це, якщо ви хочете обмежити історію, але все-таки деяку.


40
Дайте цій людині печиво (у формі маркування цієї відповіді правильною) :)
— FateNuller

7
Це не стосується передбачуваного використання, що має на увазі запитання, яке має змогу перейти до віддаленого, загальнодоступного сховища. Спроба підштовхнути неглибокий клон призводить до shallow update not allowed.
— Бред Нокс

279

Використовуйте таку команду:

git clone --depth <depth> -b <branch> <repo_url>

Де:

  • depth- це сума комісій, яку ви хочете включити. тобто, якщо ви просто хочете використовувати останнє використанняgit clone --depth 1
  • branchце назва віддаленої гілки, з якої ви хочете клонуватись. тобто, якщо ви хочете, щоб останні 3 коміти були masterвикористані у філіїgit clone --depth 3 -b master
  • repo_url URL-адреса вашого сховища

7
Це насправді та сама відповідь, що і Готьє, але більш повна і з прикладом.
— aled

3
Справді так і є. Іноді прикладом є те, що потрібно. Як на мене, його роз'яснення пояснило це питання
— Агам Рафаелі

3
+1 до основної відповіді, а також до цієї для пояснення щодо вибору гілки, до якої слід застосувати глибину - я знаю, що це частина команди клонування - але це все добре поєднує в моєму простому розумі ... і мені подобається просто
— :)

7
Як це відповідає на питання? Все це - це створити мілководний клон локально, але що тоді? Як ви скопіюєте цю локальну копію з обмеженою історією до нового репо?
— BradDaBug

4
@BradDaBug відображає дійсну точку. Я дотримувався наведених вище вказівок, обмеживши глибину на 1, потім змінив віддалене походження і потім спробував перейти до мого нового репо. Однак я отримав помилку, вказуючи shallow update not allowed. Я вважав, що відповідь на переповнення стека є корисною в цьому випадку.
— Крейг Майлз

18

Видалення .gitпапки - це, мабуть, найпростіший шлях, оскільки вам не потрібно / не потрібна історія (як сказав Стефан).

Таким чином, ви можете створити нову репо-версію з останнього зобов’язання: ( Як клонувати насіннєвий / початковий проект без усієї історії? )

git clone <git_url>

потім видаліть .gitі після цього запустіть

git init

Або якщо ви хочете повторно використовувати своє поточне репо: Зробити поточний фіксатор єдиним (початковим) комітетом у сховищі Git?

Виконайте наведені вище кроки:

git add .
git commit -m "Initial commit"

Натисніть на репо.

git remote add origin <github-uri>
git push -u --force origin master

6
#!/bin/bash
set -e

# Settings
user=xxx
pass=xxx
dir=xxx
repo_src=xxx
repo_trg=xxx
src_branch=xxx

repo_base_url=https://$user:$pass@bitbucket.org/$user
repo_src_url=$repo_base_url/$repo_src.git
repo_trg_url=$repo_base_url/$repo_trg.git

echo "Clone Source..."
git clone --depth 1 -b $src_branch $repo_src_url $dir

echo "CD"
cd ./$dir

echo "Remove GIT"
rm -rf .git

echo "Init GIT"
git init
git add .
git commit -m "Initial Commit"
git remote add origin $repo_trg_url

echo "Push..."
git push -u origin master

2
--depth 1непотрібно в цьому випадку , тому що історія також видаляється зrm -rf .git
— rayphi

3
Я думаю, я зробив би це так:git clone --depth 1 -b $src_branch $repo_src_url $dir && cd ./$dir && git commit --amend --author "Some One <some@one.com>" -m "Initial Commit" && git remote set-url origin $repo_trg_url && git push -u origin master
— rayphi

11
@rayphi так, --depth 1це зайве, але це також нешкідливо, і це економить невелику пропускну здатність мережі (немає сенсу витягувати історію, яку ви збираєтесь видалити)
— Silas S. Brown

1
Я не рекомендую робити це, якщо ви хочете підтримувати свої сховища сумісними.
— Арнольд Роа

Видалення .git також видаліть усі гачки git.
— ІудаПріес

0

Хіба це не саме те, що робить ревізію? Просто розчавіть все, крім останнього вчинення, а потім (змусити) натиснути на нього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.