LINUX.ORG.RU

История изменений

Исправление KRoN73, (текущая версия) :

ты уверен, что она правильно работает с гитовым репозиторием и что именно она с ним делает?

Её работа была отделена от GitHub'а двумя стадиями. Да хоть rm -rf пусть делает — при чём тут пропажа данных в двух не связанных с ней репах? Ведь коммиты были на GitHub в нормальном виде.

на самом деле, то что тебе нужно было сделать, это клонировать удалённый реп (origin, да?) в локал, в этот токал залить данные, и потом уж гитом пушнуть на гитхуб.

Именно так. bare-репозиторий, который я упоминаю, это именно промежуточная локальная копия. Я в топикстарте расписывал цепочку, вот по шагам то, что вокруг слияния было:

— Клонирование с GitHub в bare

— Клонирование с bare в mercurial

— Слияние в mercurial

— push из клона в bare

— push с bare на GitHub

— проверка — клон из bare в composer. Все файлы были на месте локально. Показывались удалённо на GitHub

— Дальше — объединение с данными второй машины, на которой не было никакого hg-git. Всю последовательность не помню, но там не было ничего хитрого — git fetch в тамошнем bare, git pull с bare в обычном клоне, слияние, потом git push в bare, потом git push в GitHub. На этом моменте на GitHub всё ещё были обновлённые файлы, я проверял, как обновлялись данные в composer

А вот дальше пошла фигня. Снова на первой машине, тут уже цепочка в терминалке до сих пор висит. Сперва я запустил скрипт полного обновления bare-репозиториев, который делает для git обычный fetch. Результат:

From github.com:Balancer/bors-3rd-bootstrap3
 * branch            HEAD       -> FETCH_HEAD

Потом запустил скрипт, который по списку реп пушит изменения из bare обратно на github/bitbucket (это чтобы точно не забыть закоммитить какие-нибудь изменения — репозиториев больше десятка). И вот тут выскочило:

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

Я немного удивился, так как bare-репозиторий уже не раз пушил, всё было ок. Дальше вся цепочка действий, копипаст из терминалки:

$ git push --set-upstream origin master
To git@github.com:Balancer/bors-3rd-bootstrap3.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:Balancer/bors-3rd-bootstrap3.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

$ git push -f origin master
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:Balancer/bors-3rd-bootstrap3.git
 + 573f69d...8909780 master -> master (forced update)

После этого я обновил composer. С удивлением увидел пропажу файлов. Но локально-то фигня. Заглянул на GitHub и только тут, увидев отсутствие только что бывших там файлов, вдруг мелькнула мысль, а вдруг в Git всё не так безоблачно с сохранностью/восстановлением данных, как Mercurial. Дальше:

$ git log
commit 8909780ee1e15d89133b074d4b350e341fdab73e
Author: Balancer <balancer@balancer.ru>
Date:   Tue Sep 23 05:04:30 2014 +0400

    ++

commit 51bac6f052f5ece1d8ed4482b527148e62c1ae75
Author: Balancer <balancer@balancer.ru>
Date:   Tue Mar 18 02:49:00 2014 +0400

    ++

commit ecef9e2f27862209958bc009ad765e885268e230
Author: Balancer <balancer@balancer.ru>
Date:   Tue Mar 18 02:33:40 2014 +0400

    up

commit 6f8c9ad96c2ce55d688d27583974e13db5fe01a8
Author: Balancer <balancer@balancer.ru>
Date:   Tue Mar 18 02:31:45 2014 +0400

    Init

И вот тут-то я и заподозрил, что моих файлов я могу больше не увидеть. И что Git не обеспечивает такого уровня безопасности данных, как Mercurial. И завёл сабжевую тему.

Исходная версия KRoN73, :

ты уверен, что она правильно работает с гитовым репозиторием и что именно она с ним делает?

Её работа была отделена от GitHub'а двумя стадиями. Да хоть rm -rf пусть делает — при чём тут пропажа данных в двух не связанных с ней репах? Ведь коммиты были на GitHub в нормальном виде.

на самом деле, то что тебе нужно было сделать, это клонировать удалённый реп (origin, да?) в локал, в этот токал залить данные, и потом уж гитом пушнуть на гитхуб.

Именно так. bare-репозиторий, который я упоминаю, это именно промежуточная локальная копия. Я в топикстарте расписывал цепочку, вот по шагам то, что вокруг слияния было: — Клонирование с GitHub в bare — Клонирование с bare в mercurial — Слияние в mercurial — push из клона в bare — push с bare на GitHub — проверка — клон из bare в composer. Все файлы были на месте локально. Показывались удалённо на GitHub — Дальше — объединение с данными второй машины, на которой не было никакого hg-git. Всю последовательность не помню, но там не было ничего хитрого — git fetch в тамошнем bare, git pull с bare в обычном клоне, слияние, потом git push в bare, потом git push в GitHub. На этом моменте на GitHub всё ещё были обновлённые файлы, я проверял, как обновлялись данные в composer

А вот дальше пошла фигня. Снова на первой машине, тут уже цепочка в терминалке до сих пор висит. Сперва я запустил скрипт полного обновления bare-репозиториев, который делает для git обычный fetch. Результат:

From github.com:Balancer/bors-3rd-bootstrap3
 * branch            HEAD       -> FETCH_HEAD

Потом запустил скрипт, который по списку реп пушит изменения из bare обратно на github/bitbucket (это чтобы точно не забыть закоммитить какие-нибудь изменения — репозиториев больше десятка). И вот тут выскочило:

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

Я немного удивился, так как bare-репозиторий уже не раз пушил, всё было ок. Дальше вся цепочка действий, копипаст из терминалки:

$ git push --set-upstream origin master
To git@github.com:Balancer/bors-3rd-bootstrap3.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:Balancer/bors-3rd-bootstrap3.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

$ git push -f origin master
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:Balancer/bors-3rd-bootstrap3.git
 + 573f69d...8909780 master -> master (forced update)

После этого я обновил composer. С удивлением увидел пропажу файлов. Но локально-то фигня. Заглянул на GitHub и только тут, увидев отсутствие только что бывших там файлов, вдруг мелькнула мысль, а вдруг в Git всё не так безоблачно с сохранностью/восстановлением данных, как Mercurial. Дальше:

$ git log
commit 8909780ee1e15d89133b074d4b350e341fdab73e
Author: Balancer <balancer@balancer.ru>
Date:   Tue Sep 23 05:04:30 2014 +0400

    ++

commit 51bac6f052f5ece1d8ed4482b527148e62c1ae75
Author: Balancer <balancer@balancer.ru>
Date:   Tue Mar 18 02:49:00 2014 +0400

    ++

commit ecef9e2f27862209958bc009ad765e885268e230
Author: Balancer <balancer@balancer.ru>
Date:   Tue Mar 18 02:33:40 2014 +0400

    up

commit 6f8c9ad96c2ce55d688d27583974e13db5fe01a8
Author: Balancer <balancer@balancer.ru>
Date:   Tue Mar 18 02:31:45 2014 +0400

    Init

И вот тут-то я и заподозрил, что моих файлов я могу больше не увидеть. И что Git не обеспечивает такого уровня безопасности данных, как Mercurial. И завёл сабжевую тему.