| > That's the issue. To repeat the meme, if you are "doing git properly" That's not a meme - that's just a True Scotsman fallacy. What about Submodules? Well, all true Scotsmen™ don't use submodules. What about pushing upstreams in Subtree? Well, all true Scotsmen™ don't push upstreams in subtrees. What about ours/theirs? Well, all true Scotsmen™ know how what that refers to. What about X? Well, all true Scotsmen™ know (not) to use X. --- This line of thinking glosses over the complaints of many people by constructing a magical Perfect Git User, that instinctively knows the outcome of every command in every situation over a timespan of eons, for any code base. --- > Just because you can use a tool wrong doesn't mean it's acceptable. A conscientious toolmaker would ensure that the number of ways a tool is misused it small and will craft affordances to stir people using them into pits of success, rather than just Hole-Hawging[1] the user when they make an error. [1] "At some point, the drill bit caught in the wall. The Hole Hawg, following its one and only imperative, kept going. It spun the worker's body around like a rag doll, causing him to knock his own ladder down" source: https://web.stanford.edu/class/cs81n/command.txt |
Again, it's not "don't do X", it's "don't do X until you've read the manual and you understand what X does and when you should use it versus another tool in your arsenal".
If you want to go through the list:
> What about Submodules? Well, all true Scotsmen™ don't use submodules.
Use submodules. They actually have some pretty justified use cases but for what a lot of people want them for (having a dependency that they don't intend on ever modifying other than updating which version it points to), you shouldn't use them and should use a build system's dep manager (or a script, a branch, and a worktree) for that.
Old submodules had some major warts and were deprecated with everyone quietly moving up to modern submodules. Modern submodules actually aren't that awful and haven't been for at least 5 years. If you need to contribute changes upstream from your embedded repo, you need the entire repo, and you don't intend on having history cross the submodule barrier at all (or extremely rarely at most), then you actually probably want to use submodules and you should use them.
The manual covers basically all of that
> What about pushing upstreams in Subtree? Well, all true Scotsmen™ don't push upstreams in subtrees.
Subtree isn't part of git. They are contributed software. More details as to what that means are linked below but the short of it is that they are included as a convenience and should not be treated as anything less than a third party tool, often an experimental one:
https://github.com/git/git/blob/master/contrib/README
As for subtree merges? Yeah those exist and the manual covers them. You want to push to a subtree upstream? Merge the subtree into a local copy of the upstream branch with the `-Xsubtree=rel/path/to/subtree` option. This will take your whole history with you so you'll need to either squash those changes or rebase them (both approaches are covered in the advanced merges chapter along with the subtree merges).
> What about ours/theirs? Well, all true Scotsmen™ know how what that refers to.
Thank god the manual covers that (chapter: advanced merges).
----
Again, RTFM.