Суть проблемы. Есть у меня на bitbucket репозиторий с проектом андроид-приложения. Всё с ним было замечательно, всё было круто. Я завёл отдельную ветку, внёс изменения, несколько раз запушил всё на bitbucket и однажды решил слить ветки (основная master и новая current_version). В git я знаю только основные команды и принципы, а с ветками до этого не работал. Но имею представление что должно быть после слияния. В общем, погуглил я в инете что да как и сделал слияние в android studio - переключился на master, потом выбрал current_version-ветку и в её меню выбрать merge. Собственно студия ни на что не ругнулась, а в мастере структура проекта изменилась на такую же как в current_version. Различий между ними уже не было, я убедился в этом и сделал push на сервер bitbucket.
И вот тут началась непонятная для меня мистика. В общем, захожу в репозиторий bitbucket, нажимаю кнопку "<> Код", перехожу в папку с файлами java иии... там старая структура проекта. То есть общие для обеих веток файлы обновились до последних изменений, но не добавились новые файлы, новые папки и более того - старые файлы, которые уже удалены из проекта, остались, но недоступны. При этом если перейти в раздел "изменения" и выбрать последний коммит, то в его ресурсах видно все актуальные изменения. При клонировании проекта так же сохраняется актуальная структура проекта (я склонировал и открыл клон в студии, там всё как и должно быть). А вот в репозитории bitbucket в разделе "код" почему-то не показывает все актуальные изменения.
Я попробовал провернуть тот же трюк в другом проекте на питоне и всё сделалось как и должно быть, в том числе в репозитории на сайте в разделе "код" все изменения отображаются в полной мере.
В панике и непонимании (гуглил проблему, но ни чего не нагуглил, да и не знаю даже как её гуглить, ибо фигня какая-то и зацепок нет, плюс я на панике) я удалил .git из проекта, удалил репозиторий на сайте, снова пересоздал на сайте репозиторий, склонировал, закинул файлы проекта в свежеклонированный локальный репозиторий, добавил файлы в гит "git add ." , затем закоммитил и сделал push. В итоге так же самая фигня наблюдается даже после таких манипуляций. При этом ветка в проекте всего одна - мастер.
Кстати, ранее ещё была ветка и в момент слияния master с current_version она тоже была, но в ней... вроде не было изменений, да даже если и были бы, она ведь ни как не может повлиять на происходящее, ведь обе ветки были форкнуты от мастера.
Короче, ребята, помогите тупенькому если есть идеи? =) Или так и оставить всё?
Я повторил проблему на другом проекте. Алгоритм такой:
Сначала создаём новую ветку
Вносим изменения
Делаем коммит, но не пушим на сервер
Не переключаясь на старую ветку делаем merge от неё (то есть оставаясь на current_version я сделал merge от master из меню веток)
После чего переключаемся на master и делаем merge уже от current_version.
Будет выдан запрос на слияние, всё разрешаем, сливаем, везде всё норм.
Далее коммит и пуш уже с основной ветки.
В результате на сервере имеется история изменений, в ней можно переключиться на конкретный коммит и посмотреть актуальное состояние проекта, а вот в разделе "код" будет показываться старое состояние проекта до внесения изменений в код и в структуру проекта (удалить или добавить файлы).
У меня идей так и нет, я даже не понимаю что я натворил, благо на проектах я один, это моё. Есть идеи?
Olek1, да не. Я не вопрос повторил, а проблему воспроизвёл. Взял другой свой проект и в нём поковырявшись получил ту же проблему что и в первом. С ветками я тогда не так что-то сделал.
Как я понимаю - так как последний коммит не был на сервере, то в мастер он и не замержился. Вот тебе в разделе кода и показывают "старый" код. Попробуй после пуша замержить еще раз.
И я бы еще предложил поставить source tree и посмотреть на структуру веток и коммитов в нем. Там все достаточно наглядно
Дмитрий Энтелис, есть объективные причины не пользоваться git на bitbucket?
Я просто им пользуюсь ради бесплатных приватных репозиториев. Особой разницы с github не увидел.
А как подчистую избавить проект от гита и начать гит снова? Чтобы не пересоздавать проект, но гит обнулить.
Я не могу установить source tree в ubuntu, поэтому заюзал одну из альтернатив (GitEye). И собственно вот что он мне показывает.
Полагаю я зря удалял папку .git и пытался начать историю "с чистого листа", но теперь уже ни чего не вернуть. Так можно "обнулить" гит в локальном репозитории и начать всё с нуля? А то ведь bitbucket откуда-то же подтягивает старую инфу о том как был устроен проект. Удалять папку .git и реинициализировать я пробовал, не помогло. Я не понимаю что происходит =)
koltyrin_logan_stalker, Все просто. Удаление .git повлияет только на локальную историю. Раз на bitbucket ничего нет - значит ты не заливал на него ничего.
Михаил Чварков, так в том то и дело, что на битбакете есть изменения. Ща покажу.
Вот у меня в коммитах один единственный коммит (он один, потому что я пересоздавал локальный и удалённый репозитории и заливал проект с последними версиями файлов).
Перехожу в этот коммит и захожу в исходники.
Ну и в коде проекта наблюдаем вот такую картину. Это актуальное состояние проекта.
Теперь нажимаю на красную кнопку в левом верхнем углу (Java) и перехожу к корню проекта. По идее меня должно направить к последним изменениям, ведь так?
Но перейдя внутрь проекта обнаружим вот такую картину.
Как видим тут уже иная структура проекта и что интересно - тут показаны файлы без последней даты изменения, потому что этих файлов в проекте уже нет, они удалены, но тут почему-то показываются. А общие файлы для этой версии проекта и для последней версии - соответствуют последней версии проекта, но файлы принадлежащие только последней версии почему-то не отображаются тут.
koltyrin_logan_stalker, [я пересоздавал ... удалённый репозитории] вот это скорее всего и причина. Как я понимаю - файлы без даты это то что было сразу в репозитории при пересоздании. Файлы с датой - то что ты изменил последним коммитом.
Михаил Чварков, увы, я пересоздавал несколько раз и по разному. В первый раз я просто создал чистый репозиторий на сервере, потом склонировал его и закинул в него файлы проекта без ".git". Ну разумеется "git add .", "git commit" и "git push". Картина была такая же как и сейчас. Во второй раз я просто удалил .git, реиницализировал локальный реп, потом подсоединил его к вновь созданному чистому репозиторию на сервере. Картина не изменилась. Короче, я так понимаю, это аномалия (возникшая благодаря таланту моей рукожопости) и разбираться только самому. Пока что можно, поди, и так оставить. Спасибо за попытки.
в дополнение скажу что использовать git на bitbucket пахнет мазохизмом.
Если сидите на bitbucket - пользуйтесь mercurial
В каком месте? Вы бы хоть аргументировали свои фантазии.
у меня три десятка гит-проектов на битбакете, большинство просто хранятся, но три из них автоматом деплоятся оттуда на продакшен и никакого мазохизма я не ощущаю.
Привет всем кто тут отметился. У мну для вас новости. Сегодня зашёл я на битбакет туда же где была проблема, а проблемы там уже нет =))) Странно это, но всё теперь норм =).