Git Branches as a Social Construct
utcc.utoronto.ca
utcc.utoronto.ca
The distinction between the uses is important, because you may end up talking to one of the groups and not realise you're using the same word for different things.
The interesting parts are that enough consensus emerged due to (some factors) to create that meaning, how did that consensus emerge, if it's isolated to some groups, etc.
On the contrary, this is the entire field of UX design, and quite a large chunk of material anthropology.
At some level everything we relate to is a social construct, once we use it to discuss things with other humans. A computational linguist friend of mine once wrote a long LJ post on "Ether is a social construct" after spending his PhD extracting chemical information from papers. His point was that ether, like various acids and other substances, behaves differently at different concentrations, in ways that are important for reactions but must be inferred from context and prior knowledge of chemistry. In other words, technical terms are more precise than everyday language, but are rarely fully precise because they cannot capture all the context in which they are used.
Some places use branches for versions instead of tags.
Some places religiously follow git flow’s branch rules.
Some just have a master production branch and feature branches.
Some have staging branches too.
In this way, branches become a social construct, as the use (and thus meaning) of a branch can change from organization (eg, small social circle) to organization.
However, the idea of a git branch exists independent of the manner a certain population agrees on its use. It doesn't cease to exist just because you haven't agreed on how to use it.
No! A set of bits exists on disk. A piece of software (git) interprets those bits as a branch. The idea of a branch exists in the heads of the users - subject to the usual human limitations. While quite a lot of users will be able to be precise about what a branch means in terms of git blobs, there will be people using the tool and talking about branches who don't know that. But an idea, whatever it is, exists only in the way that people think and talk about it.
Even in this thread we have people fighting about what it is: https://news.ycombinator.com/item?id=38999486
That's just what society's conditioned you to think.
I call what you describe there an abstraction. So, feels like I'm going full circle here to my original comment.
My (possibly incorrect or incomplete) understanding is that abstraction is when some complex underlying mechanism is presented in a manner that serves a specific purpose. In essence the difference between an abstraction and a social construct is that an abstraction deals with simplification of ideas and presenting them in a manner that makes it easy to interact with them.
While social constructs are about shared understanding of ideas regardless of whether these are reified in any manner or whether there is are ways to interact and engage with them.
So it could be argued that the abstraction isn’t _actually_ different than the sum of its lower level parts. It’s your understanding as a human (potentially and probably shaped by your society) that makes the abstraction easier to understand than the lower level bits.
A shared understanding (at least between an author of an abstraction and the lower level components it’s built from) is required for a software author to make any abstractions anyway.
This is exactly what I disagree with. If you do s/meaning/social\ construct/g then by that definition you're correct, but you're ironically creating two meanings of social construct: one useful one (the original), and one confusing one (that sounds like the original, but is equivalent to "meaning" or "semantics").
The humanities are, probably, the most avid user of this term, and that's why the irony. I.e. because we couldn't find a decent definition for what "race", or "ethnicity", or "culture", or "country" etc. is, every such problematic term was labeled a "social construct".
So, I think you might be too harsh on the author. I doubt they use "social construct" completely unironically. What they are actually trying to say is that "there's more to branches than meets the eye, and it turns out that it's hard to define what a branch actually is".
And yet, despite nature being composed of atoms, we can speak of nature. We can speak of humanity, despite humans being primates, and we can speak of civilization, despite other primates not being capable of civilization. Language is merely breathing and moving the tongue, yet choking is not language. Water is not hydrogen peroxide despite both being composed of hydrogen and oxygen.
Not every reductio ad absurdum argument succeeds in disproving the value of the abstraction it seeks to deconstruct. All social constructs are not natural constructs in the sense that "natural" is being employed here. Capitalism is not defined by the laws of physics. Animals don't practice capitalism. Capitalism is a "natural construct" in that we humans are biological entities and therefore a part of nature, but capitalism is not a natural construct in the sense that it is defined entirely by physical law or immutable biological instinct. The context matters.
These terms do have meaning. The fact that you can attempt an argument based on their semantics, which differs from simply pounding random letters on the keyboard, demonstrates that they have meaning.
Well if the abstraction is invented by a lone programmer who doesn't want to write documentation, is it a social construct?
Probably not -> social construct is just the wrong term.
The technical implementation allows us to put the same files in as many folder as we want, folders recursing on themselves, "smart folders" that don't have any stable set of files, remotely synched folders etc.
Yes it is. First put the file in one folder, and then make the hardlink in the other.
So the only reason it's not "trivial" is because you don't happen to always have a terminal window open.
Personally I do almost all of my file management from the shell.
It's simple enough, until the user hits the limits, start wanting more and and discoves that there's no limit and they can actually do more.
The "what is a branch" question has been very interesting for me for a while. One alternative way of looking at it is as just semantic groupings as opposed to separate universes. For almost a year I have been working on an idea[0] of having multiple branches applied in the working directory at the same time. Why? To make it easier for me to organise my changes in small PRs (eg. bugfix, featureX, unrelated refactors etc). If anyone reading this is also into the 'what is a branch' question, I would actually like to get some critique / feedback & opinions
For example, in anthropology, there was a shift where ethnicity used to be defined in some way (let's not dwell on the details, they certainly were problematic), and then someone came and said "well... ethnicity is a social construct", by which they meant "you can call this ethnicity, but I may call that other thing ethnicity, who knows what ethnicity really is... but as long as a large enough group of people agrees to use the term consistently, we are good".
And this approach to definitions keeps spreading. Some such claims become more contentious because they may run into religious orthodoxy or social conservatism that like to hold on to older (but usually not so great) definitions. Like, for example, some will claim that "gender is a social construct" meaning that beside biological gender, society can invent any number of genders it likes, as long as people agree to accept those and perceive them as "real".
But, regardless of whether you use "social construct" ironically (as to make fun of humanities majors) or actually believe it's a good way to proceed with definitions... I don't think you have anything to gain from claim that Git is a social construct. This is really only useful if you were struggling to define what Git is, and then there'd be groups of people who had competing definitions.
(…and don’t get me started on stashes. Private property is inherently theft.)
The only way to upend the oppression of Git is through Subversion!
There is no formal consensus mechanism beyond push permission in git itself; and so what would be regressive centralization of technically decentralized [git] in order to enforce directory-level permissions like e.g. CODEOWNERS is actually necessary for quality control.
Eventually, Github and Gitlab integrated code review like ReviewBoard and Gerrit (instead of mailing list patchbombs and quilt); and code review approval from zero one or more authorized reviewers is now an optional necessary precondition for merging to a git branch as a social construct.
DevSecOps says, Pull Requests (or Merge Requests) are merged only when (1) all of the automated tests pass; and (2) enough necessary reviewers have indicated approval.
Git doesn't tell you when it's necessary to have full test coverage and manual infosec review in development cycles that produce releases, and neither do Pull Requests.
https://westurner.github.io/hnlog/#comment-19552164 ctrl-f hubflow
It looks like datasift's gitflow/hubflow docs are 404'ing, but the original nvie blog post [1] has the Git branching workflow diagrams; which the wpsharks/hubflow fork [3] of datasift/gitflow fork [2] of gitflow [1]has a copy of in the README:
[1] https://github.com/nvie/gitflow
[2] https://github.com/datasift/gitflow
[3] https://github.com/wpsharks/hubflow?tab=readme-ov-file
https://learngitbranching.js.org/ is still a great resource, and it could work on mobile devices.
The math of VCS deltas and mutable and immutable content-addressed DAG nodes identified by 2^n bits describing repo/$((2*inf)) bits ;
>> "ugit – Learn Git Internals by Building Git in Python" https://www.leshenko.net/p/ugit/
SLSA.dev is a social construct atop e.g. git, which is really a low-level purpose-built tool and Perl and now Python porcelain.
jj (jujutsu) is a git-compatible VCS CLI: https://github.com/martinvonz/jj
"Ask HN: Best Git workflow for small teams" (2016) https://news.ycombinator.com/item?id=12941997
How much social construct atop git is necessary for e.g. the CPython project?
Python Devguide > Getting Started > [ Git bootcamp and cheat sheet , Lifecycle of a pull request ] https://devguide.python.org/getting-started/
Python Devguide > Development workflow > Development cycle > Branches: https://devguide.python.org/developer-workflow/development-c... :
> [ In-development (main) branch, Maintenance branches, Security branches, End-of-life branches ]
Git branches have lifecycles.
If what git calls branches is not very good at handling the general concept of branching that is an issue with git's model of it. People shouldn't redefine what branches are to be whatever git does because that assumes what git does is right.
> modern version control systems are a user interface to their underlying mathematics
Widespread (mis)understanding of Git is a direct result of programmers who don't understand library and information science refusing to accept that they're in the domain of library and information science but trying to slog through anyway without the prereq; repo operations comprise an algebra of publishing. It gets really perverse in interdisciplinary settings when technical folks start trying to explain Git to people in the humanities who are better equipped to grok its fundamentals than the average programmer.
In this age of specialization men who thoroughly know one field are often incompetent to discuss another. The great problems of the relations between one and another aspect of human activity have for this reason been discussed less and less in public.
Why would the average humanities person be better equipped to understand an algebra about source code management? What a weird take. It's not about managing a library of any kind, it's about a tree of changes. And it's not (only) about publishing either.
> It's not about managing a library of any kind, it's about a tree of changes.
No, a Git repo is not "a tree of changes" (nor is Git a "hacky diffing tool").
Define Git for me then please. Obviously we're using very different tools. Git itself, for me, manages diffs (or rather refs of diffs) as a tree. Branches are pointers. That's it.
/e: and why on earth is it an algebra about publishing? As I said before, imho it's not about publishing, but about tracking. Publishing is just an aspect.
I'll pass.
> Git [...] manages diffs (or rather refs of diffs)
Wrong.
> why on earth is it an algebra about publishing?
It's not. I said operations on a repo comprise an algebra of publishing. As for why? Because that's what we're talking about: the stupid content tracker. This is not disputable.
> As I said before, imho it's [...] about tracking
You didn't say that. And you were less than humble about what you did say.
Git is a DAG management system. It's fine if you don't understand what that means.
The world runs on science and commerce, get down your humanities high horse.
Maybe we need some librarians to explain to us what "updates remote refs using local refs, while sending objects necessary to complete the given refs" means :-)
It's interesting how many mental models of git there are. For me it's a digraph (specifically a DAG, unless you've done something horribly creative). For other people it's a patch-management tool. Or a versioned database. It seems like almost nobody thinks it's a source code repo.