devel@ where you _can_ ask
 help / color / mirror / Atom feed
* [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-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-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-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 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-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