LINUX.ORG.RU

Перенос каталога .git и «восстановление» файлов проекта

 , ,


1

2

Склонировал большой репозиторий, хочу его скопировать на другой ПК: для этого копирую только .git, потом необходимо checkout'нуть локально всё.

Пока нашёл только

git reset --hard
git checkout
Но тогда меняются
.git/ORIG_HEAD
.git/index
Есть способ checkout/reset/revert/... так, чтобы .git не менялся? Т.е., грубо говоря, состояние git скопированного проекта не отличалось от источника с соседнего ПК.

★★★★★

Последнее исправление: gag (всего исправлений: 1)

чтобы скопировать гит репозиторий на другой пк надо сделать git clone и не заниматься ерундой. а чтобы это был бэкап - надо чтобы копия репозитория была 'bare'.

invy ★★★★★
()

Т.е., грубо говоря, состояние git скопированного проекта не отличалось от источника с соседнего ПК.

git clone --bare

velikS
()
Ответ на: комментарий от Black_Roland

Работает быстро, но index меняет.

gag ★★★★★
() автор топика
Ответ на: комментарий от gag

git clone чего?

Репозитория.

Допустим оригинальный находится в А, нужно забекапить в Б. Делаешь git clone --bare A B и вуаля, бекап готов. Если что-то случится с А, всегда можно сделать git clone B A, получишь копию.

Да и вообще, если ты задумался о бекапах в dvcs, то очевидно ты не понимаешь как оно работает. У гита сколько юзеров, столько и бекапов как бы.

nanoolinux ★★★★
()
Ответ на: комментарий от nanoolinux

Делаешь git clone --bare A B

И к выше указанным изменениям добавляется ещё в config:

bare = true

Да и вообще, если ты задумался о бекапах в dvcs, то очевидно ты не понимаешь как оно работает. У гита сколько юзеров, столько и бекапов как бы.

Эт пожалуйста. Мне нужно, чтобы то, что я склонировал из инета, перенеслось на соседний ПК без изменений. Казалось бы для этого достаточно только скопировать .git, который уже пожат, а не ещё тучу файлов в придачу. Но какой командой можно выгрузить текущее состояние этих файлов из .git, чтобы его состояние не изменилось, т.е. такая себе nop-операция?

gag ★★★★★
() автор топика
Ответ на: комментарий от Black_Roland

Похоже, нужно что-то вроде:

git checkout -f --no-index
Но у меня на 1.7.10.4 нет --no-index. И не понятно, существует ли такая опция в принципе.

gag ★★★★★
() автор топика
Ответ на: комментарий от imb

Происходят какие-то изменения в некоторых файлах в .git. Не производя никаких операций по переключению веток, созданию/удалению файлов..., я рассчитываю получить неизменённый .git. В каком бы состоянии не находились файлы проекта, должна же быть возможность получить их последнее состояние из .git без того, чтобы состояние .git изменилось.

gag ★★★★★
() автор топика
Ответ на: комментарий от gag

Ок, я тебя понял. Просто я сначала подумал, что тебе бекап сделать надо.

из .git, чтобы его состояние не изменилось

Честно, я не совсем понимаю зачем тебе это может понадобиться. Можешь рассказать, зачем тебе это нужно?

nanoolinux ★★★★
()
Ответ на: комментарий от nanoolinux

Честно, я не совсем понимаю зачем тебе это может понадобиться. Можешь рассказать, зачем тебе это нужно?

Если что-то меняется, хотя я этого явно не требовал, значит тут что-то не то. Тем более когда это касается управления версиями! Обычно в таких случаях когда-нибудь потом понимаешь, что что-то сработало не так из-за того, что когда-то ты сделал одно, а оно сделало тебе и ещё что-то, на что ты не обратил внимания.

gag ★★★★★
() автор топика
Ответ на: комментарий от gag

Не вижу аргументов против git clone. Какие версии ты имеешь ввиду? Хеши коммитов? Хеши тагов? Они не меняются при клонировании. Я вообще не уверен, что их можно поменять.

что когда-то ты сделал одно, а оно сделало тебе и ещё что-то,

you do it wrong. Для того, что бы иметь две копии одного и того же репозитория на разных машинах (А ты ведь именно этого хочешь? Я правильно понял?) не надо копировать .git, надо делать git clone.

nanoolinux ★★★★
()
Ответ на: комментарий от gag

Это совершенно не то, что описал в самом начале. В архиве будут только файлы, которые под контролем гита. Папки .git вообще не будет.

nanoolinux ★★★★
()
Ответ на: комментарий от nanoolinux

Я в самом начале сказал:

для этого копирую только .git

А дальше была проблема вытащить из него файлы, не меняя сам .git, чтобы получить точную копию того каталога, куда был сделан git clone https://... на исходном ПК.

gag ★★★★★
() автор топика
Ответ на: комментарий от gag

Склонировал большой репозиторий, хочу его скопировать на другой ПК

репозиторий скопировать

nanoolinux ★★★★
()
Последнее исправление: nanoolinux (всего исправлений: 2)
GIT URLS
       In general, URLs contain information about the transport protocol, the address of the remote server, and the path to the
       repository. Depending on the transport protocol, some of this information may be absent.

       Git natively supports ssh, git, http, https, ftp, ftps, and rsync protocols. The following syntaxes may be used with them:

       ·   ssh://[user@]host.xz[:port]/path/to/repo.git/

       ·   git://host.xz[:port]/path/to/repo.git/

       ·   http[s]://host.xz[:port]/path/to/repo.git/

       ·   ftp[s]://host.xz[:port]/path/to/repo.git/

       ·   rsync://host.xz/path/to/repo.git/

хост.хз - это твоя исходная машина. делай с нее git clone

aol ★★★★★
()

Если ты скопировал каталог .git сразу после клонирования (то есть не изменял HEAD) то после команды

git reset --hard
или
git checkout -f

получишь точную копию.

Если тебя смущают отличия в .git/ORIG_HEAD то не делай reset --hard, а делай checkout -f. Так как перед тем как сделать reset, git записывает значение HEAD в ORIG_HEAD. Чтоб вернуться можно было, если не помнишь хеш.

Если хочешь точно такой же индекс, то выставь всем файлам дату создания/модификации как были там откуда скопировал. и выполни git status

Только я б с ORIG_HEAD и index заморачиваться не стал. Смысла нет, репозиторий все равно обсолютно такой же.

anonymous
()
Ответ на: комментарий от gag

В таком случае зачем вообще тебе git???

tar -cf - --exclude .git . | bzip2 (или xz или еще что) > arch.bz2

и распаковать где нужно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.