to post messages and comments.

← All posts tagged Git

Git

Как вы понимаете вот это из man gitignore

If the pattern does not contain a slash /, Git treats it as a shell glob pattern and checks for a match against the *pathname relative to the location of the .gitignore file* (relative to the toplevel of the work tree if not from a .gitignore file).

Я так понимаю (пометил звёздочками) что просто "foo" в top-level .gitignore должно матчить только foo в руте. Т.е. "foo" матчит /foo но не /a/foo (от рута рабочего дерева, не файловой системы, понятно).
Но эксперимент показывает, что матчит где кгодно в дереве.

Я плохо понимаю man или это баг в man?

Я с этим git'ом поседею. Как я добился вот такого и, главное, что теперь делать?

% git status
On branch bugfix/MDD-1934-XXXX
Your branch is ahead of 'origin/bugfix/MDD-1934-XXXX' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean

% git push
Everything up-to-date
%

Git

Самая меня бесящая пока в git вещь: git pull && git push со многими ветками. Вот я в ветке dev, делаю git pull и сразу git push — и меня ругают, что master не запушился, потому что он незапуллен! почему-то git push пушает всё, а вот git pull — фетчит всё, а мёржит — только текущую ветку. из-за этого перед push приходится руками переключатьв етки и везде отдельно звать pull. Неужели это никак не победить? pull --all не решает :(

Git

А вот как мне в git удобнее всего будет сгруппировать коммиты по-новому? Я зхнаю про squash у rebase и про cherry-pick, но у меня чуть сложнее — я бы хотел сделать набор тематических коммитов из полного салата. Какие-то коммиты, идущие не подряд, надо засквошить, какие-то вообще порезать на части по путям (и эти части засквошить с другими), а пара коммитов вообще требует разрезки посерёд одного патча. Я могу, конечно, стделать один большой diff (который содержит все нужные изменения в целом) и порезать его в текстовом редакторе и приложить кусками, но вот все же хвалятся, что в git такое делать очень удобно — но как?

Git

Как можно распространить результаты rebase'а на другие репозитории кроме как новым клонированием (что очень долго и дорого)? У меня идея в том, что рабочие станции занимаются разработкой в ветке dev, а центральный репозиторий — rebase'ом dev-ветки на master что бы разработка всегда шла поверх свежей копии master'a (которая берётся из svn). master же меняется исключительно через "git svn rebase," т.е. всегда fast-forward и никак иначе.

Git

Хм. Как бы в родителя пушнуть после rebase? Говорят, не фас-форвард — не дам. А у меня схема такая:
project.bare.git <-> project.integration. Причём ветка master идёт только project.bare.git -> project.integration а ветка dev идёт только project.bare.git <- project.integration но перед этим в project.integration я делаю для ветки dev rebase — и после этого её не впихнуть в project.bare.git (а из integration уже кормятся всякие рабочие репозитории на рабочих станциях, а он им обеспечивает коллективный ребейз).