<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.openembedded.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mzs</id>
	<title>Openembedded.org - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.openembedded.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mzs"/>
	<link rel="alternate" type="text/html" href="https://www.openembedded.org/wiki/Special:Contributions/Mzs"/>
	<updated>2026-05-09T07:31:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=MultipleRepositoryMethods&amp;diff=3798</id>
		<title>MultipleRepositoryMethods</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=MultipleRepositoryMethods&amp;diff=3798"/>
		<updated>2010-12-23T02:00:19Z</updated>

		<summary type="html">&lt;p&gt;Mzs: /* update-proj */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Notes on using multiple git repositories in a build.  Having a good way to do this is a requirement for implementing a clean layered approach.&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
Collected from various emails:&lt;br /&gt;
* Looks, feels and behaves like a standard git repo for the end user, no special tools needed.&lt;br /&gt;
* Can be checked out by the end user with one easy command.&lt;br /&gt;
* Contains full history for all the components in bisectable commits.&lt;br /&gt;
* The user can submit changes back easily with standard git workflow.&lt;br /&gt;
* tool should make it easy to add or change the pull URL for a repo.&lt;br /&gt;
&lt;br /&gt;
= Git Submodules = &lt;br /&gt;
&lt;br /&gt;
== The good ==&lt;br /&gt;
* its part of git, no extra tools, languages, etc are required to be installed.&lt;br /&gt;
* locks submodules to a specific commit, so that subprojects can proceed at their own pace, while the superproject can move them forward as they are verified, and tested.&lt;br /&gt;
&lt;br /&gt;
== The bad ==&lt;br /&gt;
* Regarding git submodules, I haven&#039;t used them in a couple of years but the last time I did, the workflow was terrible. It kept rolling back submodule versions because someone forgot to do a full &amp;quot;git submodule update&amp;quot; and then did a &amp;quot;git commit -a&amp;quot; in the superproject; we were forever forgetting to commit and push the superproject after changing submodules; it seemed to delight in finding new ways to create merge conflicts; etc.&lt;br /&gt;
* http://book.git-scm.com/5_submodules.html (pitfalls, about 2/3 way through page)&lt;br /&gt;
* Submodule was committed and pushed, but superproject wasn&#039;t committed and/or pushed, so other developers kept using old submodule.&lt;br /&gt;
* Superproject was committed and pushed, but subproject wasn&#039;t committed and/or pushed. As a result other developers couldn&#039;t clone/update.&lt;br /&gt;
* Submodules are checked out as detached HEADs. I can&#039;t count the number of times I accidentally committed on top of that damned HEAD and had to go back later to create a new branch and cherry-pick my change over.&lt;br /&gt;
* If you accidentally commit on top of the detached HEAD, &amp;quot;git submodule update&amp;quot; will silently eat your changes. This led to people being afraid to run &amp;quot;git submodule update&amp;quot;, which made the following problem more frequent.&lt;br /&gt;
* Developer 1 changed subproject A and properly pushed the superproject. Developer 2 did a &amp;quot;git pull&amp;quot; on the superproject but not a &amp;quot;git submodule update&amp;quot;. Developer 2 then changed subproject B, committed, pushed, and did a &amp;quot;git commit -a&amp;quot; in the superproject not realizing this rolls back the superproject version of submodule A.&lt;br /&gt;
* The record of subproject revisions, and to a lesser extent the .gitmodules file, are essentially hot-spots for unrelated changes, just like the old checksums.ini. It just means more merge commits if people pull instead of rebase.&lt;br /&gt;
* I don&#039;t know if this is still true, but git just couldn&#039;t handle conflicts in the subproject revisions. It would abort the merge, hard,&lt;br /&gt;
* Most of the problems would be solved by rigorously using the tools the way they were designed, but I didn&#039;t meet anyone who was capable of doing this to the extent required, and recovering from problems was painful and time consuming.&lt;br /&gt;
&lt;br /&gt;
= Google Repo =&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* requires python&lt;br /&gt;
* very capable tool, allows submodules to be specified by branch or by hash&lt;br /&gt;
* Most projects are using XML configuration, but it seems to support using git submodules as well, with fewer pitfalls than using git submodules natively&lt;br /&gt;
* Tied to Gerrit (code review tool) for upload, i.e. plain &amp;quot;git push&amp;quot; not supported&lt;br /&gt;
&lt;br /&gt;
= Braid =&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* https://github.com/evilchelu/braid&lt;br /&gt;
* written in ruby&lt;br /&gt;
&lt;br /&gt;
= update-proj.sh =&lt;br /&gt;
* Pull script: http://jrz.cbnco.com/git/?p=toastix/toastix.git;a=blob;f=update-proj.sh&lt;br /&gt;
* Push script: http://jrz.cbnco.com/git/?p=toastix/toastix.git;a=blob;f=push.sh&lt;br /&gt;
* Sample config: http://jrz.cbnco.com/git/?p=toastix/toastix.git;a=blob;f=projects.list&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* half-baked pair of shell scripts&lt;br /&gt;
* uses flat file for configuration&lt;br /&gt;
* requires different config file for committers and non-committers&lt;/div&gt;</summary>
		<author><name>Mzs</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=MultipleRepositoryMethods&amp;diff=3797</id>
		<title>MultipleRepositoryMethods</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=MultipleRepositoryMethods&amp;diff=3797"/>
		<updated>2010-12-23T01:53:26Z</updated>

		<summary type="html">&lt;p&gt;Mzs: /* Notes */ - android repo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Notes on using multiple git repositories in a build.  Having a good way to do this is a requirement for implementing a clean layered approach.&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
Collected from various emails:&lt;br /&gt;
* Looks, feels and behaves like a standard git repo for the end user, no special tools needed.&lt;br /&gt;
* Can be checked out by the end user with one easy command.&lt;br /&gt;
* Contains full history for all the components in bisectable commits.&lt;br /&gt;
* The user can submit changes back easily with standard git workflow.&lt;br /&gt;
* tool should make it easy to add or change the pull URL for a repo.&lt;br /&gt;
&lt;br /&gt;
= Git Submodules = &lt;br /&gt;
&lt;br /&gt;
== The good ==&lt;br /&gt;
* its part of git, no extra tools, languages, etc are required to be installed.&lt;br /&gt;
* locks submodules to a specific commit, so that subprojects can proceed at their own pace, while the superproject can move them forward as they are verified, and tested.&lt;br /&gt;
&lt;br /&gt;
== The bad ==&lt;br /&gt;
* Regarding git submodules, I haven&#039;t used them in a couple of years but the last time I did, the workflow was terrible. It kept rolling back submodule versions because someone forgot to do a full &amp;quot;git submodule update&amp;quot; and then did a &amp;quot;git commit -a&amp;quot; in the superproject; we were forever forgetting to commit and push the superproject after changing submodules; it seemed to delight in finding new ways to create merge conflicts; etc.&lt;br /&gt;
* http://book.git-scm.com/5_submodules.html (pitfalls, about 2/3 way through page)&lt;br /&gt;
* Submodule was committed and pushed, but superproject wasn&#039;t committed and/or pushed, so other developers kept using old submodule.&lt;br /&gt;
* Superproject was committed and pushed, but subproject wasn&#039;t committed and/or pushed. As a result other developers couldn&#039;t clone/update.&lt;br /&gt;
* Submodules are checked out as detached HEADs. I can&#039;t count the number of times I accidentally committed on top of that damned HEAD and had to go back later to create a new branch and cherry-pick my change over.&lt;br /&gt;
* If you accidentally commit on top of the detached HEAD, &amp;quot;git submodule update&amp;quot; will silently eat your changes. This led to people being afraid to run &amp;quot;git submodule update&amp;quot;, which made the following problem more frequent.&lt;br /&gt;
* Developer 1 changed subproject A and properly pushed the superproject. Developer 2 did a &amp;quot;git pull&amp;quot; on the superproject but not a &amp;quot;git submodule update&amp;quot;. Developer 2 then changed subproject B, committed, pushed, and did a &amp;quot;git commit -a&amp;quot; in the superproject not realizing this rolls back the superproject version of submodule A.&lt;br /&gt;
* The record of subproject revisions, and to a lesser extent the .gitmodules file, are essentially hot-spots for unrelated changes, just like the old checksums.ini. It just means more merge commits if people pull instead of rebase.&lt;br /&gt;
* I don&#039;t know if this is still true, but git just couldn&#039;t handle conflicts in the subproject revisions. It would abort the merge, hard,&lt;br /&gt;
* Most of the problems would be solved by rigorously using the tools the way they were designed, but I didn&#039;t meet anyone who was capable of doing this to the extent required, and recovering from problems was painful and time consuming.&lt;br /&gt;
&lt;br /&gt;
= Google Repo =&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* requires python&lt;br /&gt;
* very capable tool, allows submodules to be specified by branch or by hash&lt;br /&gt;
* Most projects are using XML configuration, but it seems to support using git submodules as well, with fewer pitfalls than using git submodules natively&lt;br /&gt;
* Tied to Gerrit (code review tool) for upload, i.e. plain &amp;quot;git push&amp;quot; not supported&lt;br /&gt;
&lt;br /&gt;
= Braid =&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* https://github.com/evilchelu/braid&lt;br /&gt;
* written in ruby&lt;/div&gt;</summary>
		<author><name>Mzs</name></author>
	</entry>
</feed>