* [newbies] git pull into subdirectory
@ 2025-11-11 18:36 Alexander Lubyagin
2025-11-12 5:25 ` Anton Farygin
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Alexander Lubyagin @ 2025-11-11 18:36 UTC (permalink / raw)
To: devel-newbies
Добрый день.
Возник такой вопрос.
Во многих репозиториях Альта принят принцип - хранить исходники в
подкаталоге %name/%name/
Как оформить первый коммит, чтобы из удалённого репозитория свежие
коммиты подтягивались сразу в подкаталог по git fetch?
Вручную, у меня получилось так, для пакета mdless (markdown viewer in Ruby):
cd mdless
git init -b master .
git remote add upstream https://github.com/ttscoff/mdless
git remote -v
git fetch upstream
git merge -s ours --no-commit upstream/develop
git read-tree --prefix=mdless -u upstream/develop
git commit -m "Subtree merged in mdless/"
git remote add local /opt/gk/man/mdless
git remote -v
git push --set-upstream local master
ls -l mdless/
git ls-files | less
--
Однако, таким способом получается дублирующийся список файлов: в ./ и в
./mdless/
Я искал другие способы. Из найденных:
[1] Использование git subtree
[2] Использование git sparse checkout
[3] Использование git worktree
[4] Использование submodule
[5] Переименование файлов + filter-branch:
https://stackoverflow.com/a/4042965
Какой из вариантов наиболее правильный?
Я пробовал смотреть в имеющихся пакетах, но, бывает, changelog длиннее,
чем git log.
Или, всё же, правильный вариант - с gear-uupdate?
https://www.altlinux.org/Gear/gear-uupdate
--
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [newbies] git pull into subdirectory 2025-11-11 18:36 [newbies] git pull into subdirectory Alexander Lubyagin @ 2025-11-12 5:25 ` Anton Farygin 2025-11-12 15:07 ` shad 2025-11-12 7:49 ` Alexander Lubyagin 2025-11-12 16:58 ` Paul Wolneykien 2 siblings, 1 reply; 7+ messages in thread From: Anton Farygin @ 2025-11-12 5:25 UTC (permalink / raw) To: devel-newbies On 11/11/25 21:36, Alexander Lubyagin wrote: > Добрый день. > > Возник такой вопрос. > > Во многих репозиториях Альта принят принцип - хранить исходники в > подкаталоге %name/%name/ Не надо учиться плохому, учитесь хорошему. Такая схема хранения исходников приводит к дополнительным действиям при работе с апстримом. Просто вынесите всё, что альтовое в отдельный каталог .gear а дерево апстримных исходников пусть лежит как в апстриме - в корне проекта. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [newbies] git pull into subdirectory 2025-11-12 5:25 ` Anton Farygin @ 2025-11-12 15:07 ` shad 2025-11-12 17:13 ` Anton Farygin 0 siblings, 1 reply; 7+ messages in thread From: shad @ 2025-11-12 15:07 UTC (permalink / raw) To: devel-newbies 12.11.2025 16:25, Anton Farygin пишет: > Не надо учиться плохому, учитесь хорошему. > > Такая схема хранения исходников приводит к дополнительным действиям при > работе с апстримом. > Добрый день, не поймите неправильно, а можно полюбопытствовать, а чем регламентированно это "хорошее"? Я не видел ни одного полиси утвержденного сообществом ALT Linux обязывающего так собирать, возможно просмотрел, да и учитывая иногда "криворукость" некоторых апстримов, сборка с гита влечет за собой "героические победы на проблемами". Справедливости ради, "пол сизифа" собрано с апстрим тарболов, часть пакетов вооще старым методом собирается через src.rpm, а уж делать ли дополнительные действия или не делать при работе с апстримом, мне кажется решает тот кто собирает... понятно, что в приоритете сборка с гита и по тегам желательно, ну а так всеж решает мантейнер пакета, как ему собирать... или я не прав? Мне очень интересна данная позия в сообществе :) С уважением --- Aleksandr Shamaraev (shad) ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [newbies] git pull into subdirectory 2025-11-12 15:07 ` shad @ 2025-11-12 17:13 ` Anton Farygin 0 siblings, 0 replies; 7+ messages in thread From: Anton Farygin @ 2025-11-12 17:13 UTC (permalink / raw) To: devel-newbies On 11/12/25 18:07, shad wrote: > > > 12.11.2025 16:25, Anton Farygin пишет: >> Не надо учиться плохому, учитесь хорошему. >> >> Такая схема хранения исходников приводит к дополнительным действиям >> при работе с апстримом. >> > > Добрый день, не поймите неправильно, а можно полюбопытствовать, а чем > регламентированно это "хорошее"? > > Я не видел ни одного полиси утвержденного сообществом ALT Linux > обязывающего так собирать, возможно просмотрел, да и учитывая иногда > "криворукость" некоторых апстримов, сборка с гита влечет за собой > "героические победы на проблемами". > > Справедливости ради, "пол сизифа" собрано с апстрим тарболов, часть > пакетов вооще старым методом собирается через src.rpm, а уж делать ли > дополнительные действия или не делать при работе с апстримом, мне > кажется решает тот кто собирает... понятно, что в приоритете сборка с > гита и по тегам желательно, ну а так всеж решает мантейнер пакета, как > ему собирать... или я не прав? > > Мне очень интересна данная позия в сообществе :) Единой позиции нет, всегда надо смотреть на то, какой апстрим. Я бы предложил такой алгоритм выбора схемы ведения проекта: 1) upstream в git, сборка из git всегда приводит к нормальному результату - > брать апстримное дерево git, добавлять в него .gear с артефактами altlinux 2) upstream в git + небольшое количество submodules -> брать апстримное дерево git, добавлять в него .gear с артефактами altlinux, submodules мержить в основную историю и собирать из созданных тегов (поискать скрипт update-submodules или что-то подобное). 3)) upstream в git + большое количество submodules -> брать апстримное дерево git, добавлять в него .gear с артефактами altlinux, все submodules паковать в отдельном тарболле (пример clickhouse) 4) upstream в git, сборка из git невозможна по каким-то веским причинам (например в git отсутствует часть кода, которая есть только в тарболле) - качать тарболл, импортировать его и собирать из тарболла 5) upstream в hg/svn/cvs и др. - > качать тарболл, импортировать его и собирать из апстримного тарболла 6) без исходников (графика, датасеты, игровые паки и т.д.) очень большого размера - > качать тарболл и собирать через src.rpm ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [newbies] git pull into subdirectory 2025-11-11 18:36 [newbies] git pull into subdirectory Alexander Lubyagin 2025-11-12 5:25 ` Anton Farygin @ 2025-11-12 7:49 ` Alexander Lubyagin 2025-11-12 16:58 ` Paul Wolneykien 2 siblings, 0 replies; 7+ messages in thread From: Alexander Lubyagin @ 2025-11-12 7:49 UTC (permalink / raw) To: devel-newbies 11.11.2025 21:36, Alexander Lubyagin пишет: > Во многих репозиториях Альта принят принцип - хранить исходники в > подкаталоге %name/%name/ > > Как оформить первый коммит, чтобы из удалённого репозитория свежие > коммиты подтягивались сразу в подкаталог по git fetch? Вроде, получилось: $ cd mdless $ git clone --separate-git-dir .git https://github.com/ttscoff/mdless mdless URL: https://git-scm.com/docs/git-clone P. S. Антон Фарыгин (rider@), спасибо за ответ - не могу на него ответить, т.к. спам-фильтр Яндекса задерживает письма на сутки и дольше. Прочитал в архиве списка рассылки. -- ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [newbies] git pull into subdirectory 2025-11-11 18:36 [newbies] git pull into subdirectory Alexander Lubyagin 2025-11-12 5:25 ` Anton Farygin 2025-11-12 7:49 ` Alexander Lubyagin @ 2025-11-12 16:58 ` Paul Wolneykien 2025-11-12 17:46 ` Mikhail Efremov 2 siblings, 1 reply; 7+ messages in thread From: Paul Wolneykien @ 2025-11-12 16:58 UTC (permalink / raw) To: devel-newbies В Tue, 11 Nov 2025 21:36:19 +0300 Alexander Lubyagin <lubyagin@yandex.ru> пишет: > Добрый день. > > Возник такой вопрос. > > Во многих репозиториях Альта принят принцип - хранить исходники в > подкаталоге %name/%name/ > > Как оформить первый коммит, чтобы из удалённого репозитория свежие > коммиты подтягивались сразу в подкаталог по git fetch? В последнее время использую команду git subtree. Ранее же делал через -Xsubtree, то есть: git pull/merge --allow-unrelated-histories -Xsubtree=subdir/ ... После первого раза git потом сам туда складывает. Однако, чтобы любой из данных способов сработал, необходимо, чтобы subdir/ уже существовал _внутри git_. Для этого нужно сделать, например, вот так: mkdir subdir touch subdir/.gitignore git add subdir/.gitignore git commit -m "Prepare subdir for git://project.path/repo.git" И дальше уже git subtree или git pull --allow.. -Xsubtree=... > Вручную, у меня получилось так, для пакета mdless (markdown viewer in Ruby): > > cd mdless > git init -b master . > git remote add upstream https://github.com/ttscoff/mdless > git remote -v > git fetch upstream > git merge -s ours --no-commit upstream/develop > git read-tree --prefix=mdless -u upstream/develop > git commit -m "Subtree merged in mdless/" > git remote add local /opt/gk/man/mdless > git remote -v > git push --set-upstream local master > ls -l mdless/ > git ls-files | less > > -- > > Однако, таким способом получается дублирующийся список файлов: в ./ и в > ./mdless/ > > Я искал другие способы. Из найденных: > [1] Использование git subtree > [2] Использование git sparse checkout > [3] Использование git worktree > [4] Использование submodule > [5] Переименование файлов + filter-branch: > https://stackoverflow.com/a/4042965 > > Какой из вариантов наиболее правильный? > Я пробовал смотреть в имеющихся пакетах, но, бывает, changelog длиннее, > чем git log. > > Или, всё же, правильный вариант - с gear-uupdate? > https://www.altlinux.org/Gear/gear-uupdate > > -- > > _______________________________________________ > devel-newbies mailing list > devel-newbies@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/devel-newbies ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [newbies] git pull into subdirectory 2025-11-12 16:58 ` Paul Wolneykien @ 2025-11-12 17:46 ` Mikhail Efremov 0 siblings, 0 replies; 7+ messages in thread From: Mikhail Efremov @ 2025-11-12 17:46 UTC (permalink / raw) To: devel-newbies On Wed, 12 Nov 2025 19:58:58 +0300 Paul Wolneykien wrote: > В Tue, 11 Nov 2025 21:36:19 +0300 > Alexander Lubyagin <lubyagin@yandex.ru> пишет: > > > Добрый день. > > > > Возник такой вопрос. > > > > Во многих репозиториях Альта принят принцип - хранить исходники в > > подкаталоге %name/%name/ > > > > Как оформить первый коммит, чтобы из удалённого репозитория свежие > > коммиты подтягивались сразу в подкаталог по git fetch? > > В последнее время использую команду git subtree. > > Ранее же делал через -Xsubtree, то есть: > > git pull/merge --allow-unrelated-histories -Xsubtree=subdir/ ... > > После первого раза git потом сам туда складывает. Однако, чтобы любой > из данных способов сработал, необходимо, чтобы subdir/ уже существовал > _внутри git_. Для этого нужно сделать, например, вот так: > > mkdir subdir > touch subdir/.gitignore > git add subdir/.gitignore > git commit -m "Prepare subdir for git://project.path/repo.git" > > И дальше уже git subtree или git pull --allow.. -Xsubtree=... У меня почти все репо с апстримными исходниками в subtree, но я просто готовлю subtree по инструкции с https://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html Никаких "touch subdir/.gitignore" при этом не требуется. Потом мержу апстрим как git merge -X subtree=<subdir> <тэг> Единственная проблема, которую я встречал при такой схеме: если в дереве исходников апстрима есть каталог, имя которого совпадает с именем subdir (а обычно это %name), то git'у может снести крышу при мерже. В этом случае я просто переименовываю subdir в %{name}-src. Впрочем, давно уже такого не видел, может git уже научился справляться с этим. -- WBR, Mikhail Efremov ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-11-12 17:46 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-11-11 18:36 [newbies] git pull into subdirectory Alexander Lubyagin 2025-11-12 5:25 ` Anton Farygin 2025-11-12 15:07 ` shad 2025-11-12 17:13 ` Anton Farygin 2025-11-12 7:49 ` Alexander Lubyagin 2025-11-12 16:58 ` Paul Wolneykien 2025-11-12 17:46 ` Mikhail Efremov
devel@ where you _can_ ask This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel-newbies/0 devel-newbies/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel-newbies devel-newbies/ http://lore.altlinux.org/devel-newbies \ devel-newbies@lists.altlinux.org devel-newbies@lists.altlinux.ru devel-newbies@lists.altlinux.com public-inbox-index devel-newbies Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel-newbies AGPL code for this site: git clone https://public-inbox.org/public-inbox.git