Форум программистов, компьютерный форум, киберфорум
Git
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631

Git как механизм сравнения репозиториев

14.08.2018, 23:56. Показов 5458. Ответов 12
Метки git (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, проконсультируйте плииз.

Есть десяток папок с одним одинаковым текстовым файлом в разных проектах.
Любой из владельцев папки может поменять файл (не часто и не значительно).

Хочу "натравить" на них гит, поднять гит-сервер и написать утилиту для поиска отличий.

Задача: отловить отличия файлов и выдать в отчет (на ноде). Нужен ТОЛЬКО "факт отличия" - контроль версий не важен!

Раньше они сидели на одном сервере и отличия вылавливались (отдельной утилитой) по "дате изменения". Даже если поменяли 2е из 10ти в разное время можно было вывести в табличку "прошло с изменений" и у одного получалось 2 дня, у другого 5 дней, а у всех остальных 50 дней - хватало для начала решения конфликтов сравнением построчно.

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

Гит на такое способен? Или это как "из пушки по воробьям" и проще по md5(контрольная сумма) файла сравнивать?

Еще один нюанс: папки УЖЕ созданы(в работе)! Создать в них гит я могу, но не создавать каждому "свежую" папку из главного репозитория(clone)... Можно/тяжело ли "объединить в общую сеть" разные репозитории?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2018, 23:56
Ответы с готовыми решениями:

Механизм работы git merge
Мне стало интересно как изнутри работает механизм git merge. То есть допустим если я создал две ветки и сделал два комита на одной ветке...

Почему git add . и git add * это плохо? И как тогда быть?
Вопрос по гиту, почему git add . и git add * это плохо? и как тогда быть?

Как вывести два графика для визуального сравнения сравнения
Как вывести два графика с данными в один для сравнения import numpy as np import matplotlib.pyplot as plt import pandas as pd from...

12
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
15.08.2018, 01:32
Цитата Сообщение от andyj Посмотреть сообщение
Нужен ТОЛЬКО "факт отличия" - контроль версий не важен!
Тогда просто используй diff с ключом -r.
man diff
1
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
15.08.2018, 07:32  [ТС]
Цитата Сообщение от andyj Посмотреть сообщение
папки УЖЕ созданы(в работе)! Создать в них гит я могу, но не создавать каждому "свежую" папку из главного репозитория(clone)... Можно/тяжело ли "объединить в общую сеть" разные репозитории?
А на это что-нибудь подскажите? Мне не приходилось с подобным сталкиваться и не знаю "как начать". 10 папок. в каждой могу запустить git init и прописать ссылку на главный репозиторий. Смогу я после этого СРАЗУ их начать "сравнивать"? Или еще что-то надо прописать? Пока "с наскока" это не получилось, но возможно руки кривые(опыта мало)... Встречал (СЛОЖНЫЕ) инструкции в гугле по "объединению репозиториев" - это мой случай или это только для "слияния 2х разных проектов в один"?
0
Эксперт .NET
 Аватар для Rius
13091 / 7650 / 1672
Регистрация: 25.05.2015
Сообщений: 23,292
Записей в блоге: 14
15.08.2018, 07:38
Если вам версии файлов не нужны, то git не нужен.
Вам нужно определить факт изменения файла на ПК? Или факт появления отличия между файлом на ПК и его копией на сервере? Или содержимое файла у всех должно быть одинаковым и отличие надо обнаружить?
Что за файл вообще?
0
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
15.08.2018, 10:43  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Вам нужно определить факт изменения файла на ПК?
да, найти отличия и показать в отчете "не помешало бы их сделать одинаковыми"

Цитата Сообщение от Rius Посмотреть сообщение
Или содержимое файла у всех должно быть одинаковым и отличие надо обнаружить?
да, обнаружить чтобы найти время и "выровнить"

Цитата Сообщение от Rius Посмотреть сообщение
Что за файл вообще?
файл - текстовый "модуль" одинаковый для нескольких (многих) проектов.

p.s. В среднем каждый 6-12 месяцев ищу (>5 лет) готовое решение по этой теме здесь и на других форумах... похоже его не существует... А теперь "поджимает".

ЗАДАЧА:
Десяток-два модулей "частых функций" или "мини-фреймворки" на 3-5 файлов. Например модуль работы с рандомом:

JavaScript
1
2
3
4
5
Rnd.getInt(0, 1000)
Rnd.getArr([1, 2, 9])
Rnd.getBool(30) //30%=true
Rnd.getColor() //цвета HTML, в параметрах можно задать светлые/темные/все и прозрачность
// случайные строки, генератор простых паролей, в кирилице/латинице, hex, из предложенной строки
- подключил в проект и команда (уровня "поставил, потестил, стер") "всегда под рукой"(одинаковая/похожая на нескольких языках). Время от времени менял в одном проекте (дописывал еще один "рандом", исправлял ошибку или оптимизировал) и "раскидывал" по остальным проектам.

После безуспешных поисков готового git/svn решения собрал "костыль" в 1С7.7 за пару часов (за годы работы развил в целый "комбаин") - база(таблица) проектов(больше 10), база таких модулей(намного больше 10), база модулей проекта("соответствия", с автоматическим поиском/заполнением по папке проекта), отчеты, поиск "измененных", механизм простой замены(с сохранением до 3х старых копий), механизм построчного сравнения/исправления (подключена внешняя утилита из TotalCommander'a). При переносе проекта лишь в таблице прописывал новый путь. Сравнение шло по "старшенству" файлов (дата изменения) - красиво подкрашивалось в отчете и предлагало оптимальные пути по обновлению и инструменты решения конфликтов.

Сейчас (через месяц-два-три) часть проектов надо вынести на другие компы, включая не виндовые и хочу переписать на нечто мультиплатформенное и опенсорсное. С 1С7.7(удобное, но платное и только-виндовое) на node(ядро)+web(общий интерфейс, отчеты) + nwjs(локальный интерфейс в tray и "следилка") + git(сравнение, архивы, "транспорт" через сеть). Почему бы не подключить git для хранения ПОЛНОЙ истории версий вместо последних 3х (my.js~1, my.js~2, my.js~3)... За последние >5 лет необходимости "поднять" ранние версии не было(а если надо, то либо в гите каждого "основного" проекта сохранялась, либо в архивных копиях 7zip), но было бы круто изучить/просмотреть/визуализировать(gource) историю каждого такого "универсального модуля".

Думал о git-"модулях", но все эти "универсальные" модули скинуты в одну общую папку(от 1 до 30 на проект), а не каждый в своей папке и подключение/обновление сложное. Знаю (проверил, не сложно) что гит можно "натравить" на любой файл закинув .git и рабочий файл в разные папки... но сначала хочу "выработать методику" простой замены (раньше это делал в 1-5 кнопок удобного интерфейса без строчки в консоли). Хочу сделать ТО-ЖЕ но на методиках гита... или прийдется писать "межкомпьютерный" модуль поиска отличий через md5 и синхронизации... Естественно все должно работать в интерфейсе "обновляльщика", а не в консольных командах - поэтому хотелось бы нодой получать "результат выполнения" команд гита и парсить их, а не "вычитывать" консольный отчет на команду гита на 2-3 страницы/экрана в поиске "отличий не обнаружено".

...готов выслушать ЛЮБЫЕ советы!
0
Эксперт .NET
 Аватар для Rius
13091 / 7650 / 1672
Регистрация: 25.05.2015
Сообщений: 23,292
Записей в блоге: 14
15.08.2018, 10:54
Цитата Сообщение от andyj Посмотреть сообщение
Знаю (проверил, не сложно) что гит можно "натравить" на любой файл закинув .git и рабочий файл в разные папки..
Ага, --git-dir.
Если хотите git, можно так:
  • сетевой каталог либо git сервер;
  • на нём репозиторий этого дела;
  • в репозитории ветки по числу и/или именам компьютеров;
  • на каждом клиентском ПК нужный файл находится под контролем git, который подключён к своей ветке в общем репозитории;
  • периодически или по событию в файловой системе производится поиск изменений между текущей версией и последней зафиксированной локально и в репозитории;
    • если локально изменилась - коммитится и пушится в репозиторий;
    • если изменилась в репозитории, пулится оттуда и заменяет локальную копию (если оно вообще надо);
  • на сервере можно вытащить из всех веток последние версии файлов и сравнить их между собой;
  • хорошо бы в самих файлах хранить какой-то идентификатор версии.
1
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
15.08.2018, 18:51  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
хорошо бы в самих файлах хранить какой-то идентификатор версии.
Это как? Или зачем?

У меня мало опыта с ГИТом (особенно на несколько разработчиков). Поэтому мне тонкости приходится "с нуля" изучать и тестировать...

Главное что беспокоит:

1) Папки с файлами УЖЕ есть! Уже раскиданы по винчестерАм. Хочу "провернуть" простой набор команд и "включить их в систему" гит-репозиториев. Пробую БАТниками подобрать оптимальный набор алгоритмов для создания и связывания репозиториев (потом перенесу их в ноду). Пробовал создать в test1/my.js и в test2/my.js 2 репозитория и их "связать" - не получилось! Это "руки кривые" и надо копать дальше или это не предусмотрено ГИТом и надо все ветки от "единого предка" делать?
Или изначально прийдется сравнивать/выравнивать вручную, а потом "пересоздавать" в папках методом clone?

Изначально задумка была такой:

Исходники:
test1/my.js
test2/my.js

Создаю: (git init c кучей параметров)
my_git_1/test1/.git
my_git_1/test2/.git
одного из них назначаю "главным", остальные к нему "подчиненные"

потом провожу "первичную синхронизацию" и выравниваю версии commit'ов - чтобы у всех последняя была.
потом пишу батники для разных методик синхронизации... и алгоритмы решения конфликтов...

2) еще не могу придумать, нужно ли в моем случае создавать "ветки"? или все могут работать в master? Проектов может быть сотни (некоторые создаю только для отладки/тестирования подобных модулей, но остальные "вспомогательные" модули надо держать актуальными) и без "менеджера веток" я запутаюсь...
Если честно, хотелось бы обойтись одной веткой... конфликты возникают крайне редко! из 20 проектов обычно 1меняет, реже 2...
0
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
17.08.2018, 18:07  [ТС]
вроде разобрался с основами...

..."кривые руки" были! 2 независимо-созданных репа можно "сливать" в один общий. И ветки плодить не обязательно - вполне все можно делать в master ("не по феншую", но можно).

Последний вопрос: Кому-нибудь из ВАС подобная система интересна? Могу попробовать (не сразу) сделать этот проект опенсорсным и выложить ни гитхаб, но за последние 3-5 лет не встречал особого энтузиазма у окружающих (ответы типа "меня и обычная ГИТ вполне устраивает").

Суть системы - поддержка между разными независимыми проектами "одинаковости" единичных/"именных" файлов - одинаковых мини-библиотек, батников(bat, sh), настроек (ini, inf, "одинаковый .gitignore для всех моих ноде проектов"), файлов лицензий, файлов отвечающих за "любимый дизайн"(xml в андроиде, png, css, scss - например либа создания закругленных уголков в одну команду). А так-же ведение реестра проектов (можно будет коментарий задать - когда мини-проектов уже больше 30-50 я не могу вспомнить ни когда, ни кому подобное делал, ни название "той папки").
0
17.08.2018, 20:10

Не по теме:

Цитата Сообщение от andyj Посмотреть сообщение
Последний вопрос: Кому-нибудь из ВАС подобная система интересна? Могу попробовать (не сразу) сделать этот проект опенсорсным и выложить ни гитхаб, но за последние 3-5 лет не встречал особого энтузиазма у окружающих (ответы типа "меня и обычная ГИТ вполне устраивает").
Дело не в гите, а в оригинальности организации проектов у вас.

0
17.08.2018, 21:24  [ТС]

Не по теме:

Цитата Сообщение от Rius Посмотреть сообщение
Дело не в гите, а в оригинальности организации проектов у вас.
Не могу этого понять! Неужели у Вас нет архива их однотипных проектов "на обслуживании"? Микро-сайтов-визиток, где все похоже, ядро почти одинаковое, админка одинаковая, стили у админки "свои любимые", а под клиента лишь дизайн меняется?
Я уже приводил выше - модуль Rnd c десятком полезных утилит... неужели если Вам надо потестить программу на случаных параметрах вы каждый раз с нуля ее пишете или "выдираете" из одного из прошлых самых удачных проектов?

Я с зимы серьезно взялся за Ноду и у меня уже около 60 мелких проектов для "отладки запчастей". И больше 80 таких мелких файлов в которых надо отслеживать "последнюю самую надежную версию"... А за 10 лет подобных файлов-микрофреймворков набралось больше 500 (и Делфи, и РНР, и Лазарус, и С++, и Андроид, и js/node, и scss).

Как же остальные работают???

0
17.08.2018, 21:26

Не по теме:

Цитата Сообщение от andyj Посмотреть сообщение
Не могу этого понять! Неужели у Вас нет архива их однотипных проектов "на обслуживании"? Микро-сайтов-визиток, где все похоже, ядро почти одинаковое, админка одинаковая, стили у админки "свои любимые", а под клиента лишь дизайн меняется?
У меня - нет.
Области деятельности бывают разные.

Цитата Сообщение от andyj Посмотреть сообщение
неужели если Вам надо потестить программу на случаных параметрах вы каждый раз с нуля ее пишете или "выдираете" из одного из прошлых самых удачных проектов?
Пишется библиотека с юнит-тестами, потом используется по надобности.

0
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
17.08.2018, 23:19  [ТС]

Не по теме:

Цитата Сообщение от Rius Посмотреть сообщение
Пишется библиотека с юнит-тестами, потом используется по надобности.
Неужели между проектами нет одинаковых "запчастей", ради которых не охота заводить целую библиотеку?
Я тоже пишу свои юнит-тесты, и у них по любому есть некая "привычная схема" разработанная МНОЙ под МОИ программы... вырабатывате некий внутри-корпоративный стандарт. А значит появляются некие алгоритмы свойственные всем проектам одной корпорации, которые можно вынести во внешние модули... но подобных 50 модулей на проект - нагрузка на сборщик/компилятор.

Сейчас пишу (основной проект) простенький телеграм-бот. В нем 43 таких файла (Rnd, Log, Str, Timers, Rep, ...), которые повторяются между разными проектами и не имеют отношения к телеграмму или к ботам... 3 проекта работают с одной общей базой и должны быть уверены что известная им "структура таблиц" является "самой последней/актуальной" = либо ручками править 3 структуры (ОРМ), либо перекидывать модуль между проектами, либо написать "следилку".

Жаль!

Спасибо! Пожалуй закрываю тему! буду писать "для себя"...
0
17.08.2018, 23:23

Не по теме:

Цитата Сообщение от andyj Посмотреть сообщение
Неужели между проектами нет одинаковых "запчастей", ради которых не охота заводить целую библиотеку?
У меня нет. Отдельные функции и так легко вспомнить, а крупный код...
К тому времени, как возникнет новый проект, проходит достаточно много времени. Прежний код уже видится полнейшим говнокодом. Но поправить его в старом проекте некогда, а в новый проект тащить - размножать говнокод.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2018, 23:23
Помогаю со студенческими работами здесь

Как обновить список репозиториев?
Прошу помочь!: Debian 7.2 wheezy, 32 бита, к сети подключен deb http://ftp.ru.debian.org/debian stable main contrib non-free ...

Как установить opera в kubuntu из репозиториев?
С Linux был незнаком до сего момента.Мне он понадобился для работы на Ruby on Rails.С малых лет сидел только на винде,и поэтому после...

Как разрешить зависимость в проектах фабрики репозиториев?
есть фабрика репозиториев реализованная с помощью ninject в MVC4 проекте, решение состоит из еще 3 проектов. как разрешить зависимость в...

Как установить tomcat из исходников или репозиториев?
Привет,возникла проблемс(не знал куда поместить тему,то в java,контейнер сервлетов как никак,то ли в ubuntu) Никак не могу установить...

Команда $git init создает .git не в той папке
Привет. Не нашел на форуме раздела, где мог бы задать вопрос по работе git, пишу поэтому сюда. После команды $git init в git-bash папка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru