2015-04-20 8 views

ответ

32

Вы можете сделать

git clone <git_url> 

удалить .git хранилище из папки. Который удалит всю вашу историю.

вы можете сделать

git init 

, который будет создавать совершенно новый проект GIT для вас.

Возможно, это не лучший способ. Но это сработает. Надеюсь, поможет.

+4

Это, скорее всего, удалит все подмодули. –

+0

@AleksanderAlekseev, о каких подмодулях вы говорите? – Willa

+0

Если вам не нужна история, это самое простое исправление. – Willa

11

До тех пор, пока вы считаете, что полная потеря истории не является проблемой, подход, предложенный Ajay, совершенно применим. Но если вы хотите сохранить историю своего мелкого клона, у меня есть другое предложение.


неглубокий клон притворяется, чтобы иметь полную историю с помощи так называемый graft point подделать родитель из «первых» совершить.

Если мы предположим, что мы имеем полную историю доступной, мы могли бы перефразировать вопрос: How can I throw away the history before a specific revision?

Это означает, что мы можем использовать комбинацию точки трансплантата и git filter-branch (как это было предложено в связанном вопросе). Однако вы должны заметить, что это перепишет вашу полную историю, сделав новую, несовместимую с удаленным, с которого мы первоначально клонировали. Из-за этого мы должны удалить старый удаленный из нашего репозитория.

git remote remove <old-remote-name> 

Теперь мы можем начать наш переписывать. Предположим, что мы хотим, чтобы текущий мастер зафиксировал новый корень для репозитория.

git rev-parse --verify master >> .git/info/grafts 
git filter-branch -- --all 

Это будет переписать всю историю нашего репозитория, с текущим мастер фиксации в качестве нового корня. Вы можете завершить переписывание, удалив «резервные» ссылки в refs/original. Кроме того, вы можете удалить файл .git/shallow.

После того, как вы это сделали, вы сможете нажать на историю незарегистрированных на вашем новом пульте дистанционного управления.

+0

Git версия> 1.9.0 позволяет проталкиваться от мелкого клона. И это довольно удобно, если вы хотите сохранить всю историю на сервере, но для истории этого года требуется только предыстория прошлого года. Единственное, я думаю, вам нужно иметь git> 1.9.0 на клиенте и сервере, чтобы использовать эту функцию. – jtorca

+0

Вместо 'git rev-parse -verify master >> .git/info/grafts', я сначала проверил новую точку трансплантата, затем использовал ссылку commit:' git rev-parse -verify 9133eece0 >> .git/Информация/grafts'. Затем я сделал 'git filter-branch - --all'. Мне не нужно было удалять файл '.git/noow', поскольку он уже исчез. Не совсем понял, как удалить «резервные» ссылки в «refs/original», и я предполагаю, что это было связано с тем, что приемо-репо было еще 68M. Однако после перехода на новый репозиторий вверх, клонированный локально, и результатом был 112K-клон, который я ожидал. – JinnKo

+1

@JinnKo Что я имел в виду с * удалением «резервных» ссылок *, было буквально выполнить 'rm -rf .git/refs/original'.;) –

0

попробовать что-то вроде этого:

mkdir -p /tmp/git-copy 
cd /tmp/git-copy 

# create another copy of your repository 
git clone file:///path/to/cloned/repo 

cd repo 
git rebase -i (first-commit) 

# in vim: 
# :2,$s/^pick/squash 
# :w 

# Now wait, it will take a while... 

git push --mirror [email protected]:username/new-repo.git 

Я попробовал это только сейчас на this repository. Кажется, работа - нет истории, и все подмодули не повреждены.

+0

Просто перестройка не сработала для меня так как использование аргумента 'depth' всегда делает клон неглубоким, и это то, о чем просит ОП, и мой пример использования. Правильный ответ требует' как говорит Зикер. –