git
-
a [[list]].
- of [[repositories]].
- If you [[go/git/project]] in an Agora, you might just land in its well known Git repository (not necessarily [[Github]]).
-
a [[version control system]].
- by [[linus torvalds]]
- #pull [[git-config]] [[git-alias]] [[git-ship]]
- https://twitter.com/flancian/status/1377588651232800771
Git
Local Git Exclude
Edit the local exclude file in your git repo without having to edit the global .gitignore
.git/info/exclude
Source: StackOverflow
Counting files in a git repo
git ls-files | wc -l
Source: Stackoverflow
Git is a popular version control system.
Tricks
Writing a Git Commit Message
- Concise and consistent length and form
- Communicate clear context about a change to fellow developers. Ensure that other developers understand why a change was made.
Rules
- Separate subject from body with a blank line if the body is to be used.
- Limit subject line to 50 characters
- Capitalize subject line
- Do not end with period
- Use imperative mood; I 'do' this. Rationale: If applied, the commit will change these aspects of the code. Git's own built-in conventions use this form.
- Wrap at 72 characters
- Use the body to explain 'what' and 'why' as necessary
Organization Thoughts
github organization:
- one repo per course - as most courses require partner work
= repo for coding challenge practice problems
- managing research notes: ??? i am thinking a single org file for all of this
- - that is, an org file in each project for the research notes pertaining to that project,
- - and anotherorg file for misc. research ?? i will have to see how my research is used
https://danieltakeshi.github.io/2017/07/15/how-i-organize-my-github-repositories/
Rewriting
It's a good idea to reformat commits to make them more readable.
git reset HEAD~${number of commits to go back}
Tricks
http://joeyh.name/blog/entry/how_to_publish_git_repos_that_cannot_be_republished_to_github/ :: cheeky way to abuse DMCA to avoid GitHub using your Git repos https://sourcehut.org/blog/2020-10-29-how-mailing-lists-prevent-censorship/ using the mailing list model over the built-in issue model, and how this naturally federated and local first procedure is superior to github's standard issue approach https://sagegerard.com/git-debugging.html: use git bisect while referencing maintainers of specific parts of code to narrow down to the code you should care about, then ask the maintainers about it - while putting in a minimum of effort. https://labs.consol.de/development/git/2017/02/22/gitignore.html using .gitignore the right way
Patch previous commits with rebases
https://stackoverflow.com/questions/9103396/how-do-i-edit-a-previous-git-commit If you need to change commit history:
- Make another commit to make the change
- Rebase starting at the commit you want to change
- Squash the new commit with the old one in the history
- Remove the second commit message (or merge it…)
This did change the commit time for my latest commit, which is something to watch out for.
How Git Works
Neat writeup on the Git patience diff algorithm "Distributed, offline-first bug tracker embedded in git, with bridges" Prototype Git GUI for Filmmaking "Pull github, bitbucket, and trac issues into taskwarrior" Text-mode interface for git bcongdon/git-trophy: ? Create a 3D Printed Model of Your Github Contributio
Worktrees
-
A git repository can have multiple working trees - allowing you to
check out more than one workspace at a time!
- Among other things, this allows you to work on multiple branches at once without having multiple copies of the file, and maps git branches or tags to other directories on your system. Use it to check on different efforts on projects without messing up your current editing environment - to look at code from other branches locally and simultaneously, for example!
- `git worktree add $PATH` :: Adds a new branch with a name associated with the final component of $PATH. `git worktree remove` and `git worktree prune` both allow you to cut off external worktrees.
- Flow example: latest develop, latest branch of work, and a third for reviewing pull requests and/or the work from other developers.
Github
track changes to a patch over time git flow: git extensions for high level repository operations explore git cli with natural language search github is sinking
READMEs
A curated list of awesome Github Profile READMEs 📝 https://github.com/pifafu/pifafu/blob/main/readME.md i love the font choice and the gif here!
Code Review
How to do a code review | eng-practices
Alternatives
fossil
git with additional features such as task management. it seems like a
superset of git's system. Fossil vs.
Git
Incrementally converting from git to fossil while working on the git
repo
repo
Google's tool for managing monorepos.
Pijul
A distributed version control system
Bazaar
Canonical's version control system
Table of Contents
[2020-04-19]
The Communicative Value of Using Git Well – Math ∩ Programming [[git]][2017-05-06]
usehg-fast-export
to convert [[mercurial]] [[git]][2016-09-07]
git stores snapshots, not diffs [[git]]- [[NOCOMMIT global hook?]] [[git]]
[2019-08-18]
Highlights from Git 2.23 - The GitHub Blog [[git]]- [[Git blame ignore formatting]] [[git]]
[2019-08-24]
Fossil Versus Git | Lobsters [[git]]- [[My unorthodox, branchless git workflow | Lobsters]] [[git]]
- [[a page with my favourite git commands & tricks?]] [[git]] [[toblog]] [[exobrain]]
- [[The Communicative Value of Using Git Well – Math ∩ Programming]] [[git]]
[2019-08-02]
git - How do I remove a submodule? - Stack Overflow [[git]][2019-12-11]
git reflog expire –expire=now –all && git gc –prune=now –aggressive [[github]][2019-05-10]
git rebase –committer-date-is-author-date –autostash HEAD~1 [[git]][2020-06-08]
Learn to change history with git rebase!-
[2018-11-28]
extraction - How to extract one file with commit history from a git repo with index-filter & co - Stack Overflow [[git]] [2020-07-12]
- GitHub + why do we centralize issues, documents for a distributed version… | Hacker News[2018-01-01]
detect file type changes [[git]]- [[git ssh debugging]] [[git]] [[ssh]]
[2021-01-11]
How to keep your Git history clean with interactive rebase | GitLab[2020-11-16]
Why Git blame sucks for understanding WTF code (and what you should use instead) | Lobsters[2019-07-21]
git - How do I remove a submodule? - Stack Overflow https://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule/7646931#7646931 [[git]]
[2020-04-19]
The Communicative Value of Using Git Well – Math ∩ Programming [[git]]
[2017-05-06]
use hg-fast-export
to convert [[mercurial]] [[git]]
[2016-09-07]
git stores snapshots, not diffs [[git]]
Different from SVN
It is important to note that this is very different from most SCM systems that you may be familiar with. Subversion, CVS, Perforce, Mercurial and the like all use Delta Storage systems - they store the differences between one commit and the next.
Git does not do this - it stores a snapshot of what all the files in your project look like in this tree structure each time you commit. This is a very important concept to understand when using Git.
Git’s pack files are carefully constructed to effectively use disk caches and provide “nice” access patterns for common commands and for reading recently referenced objects.
NOCOMMIT global hook? [[git]]
[2019-08-18]
Highlights from Git 2.23 - The GitHub Blog [[git]]
https://github.blog/2019-08-16-highlights-from-git-2-23/
You may have used git grep to search for some text in your Git project, just as you may have used git diff to view active changes. What do the two have in common? They both display some contents in your repository, and both have support to show the surrounding function context with -p (short for --show-function) or -W (short for --function-context), respectively.
Git blame ignore formatting [[git]]
Configure your git blame to ignore cleanup changes.
https://www.moxio.com/blog/43/ignoring-bulk-change-commits-w…
[2019-08-24]
Fossil Versus Git | Lobsters [[git]]
https://lobste.rs/s/e3blgf/fossil_versus_git
This article is getting a few things about git wrong. They claim git only supports ‘One check-out per repository’. Heard of git worktree?
My unorthodox, branchless git workflow | Lobsters [[git]]
Git revise is especially useful for this commit stack workflow, as I call it. I’m a huge fan.
It’s a better rebase. So much better that it should be obligatory. You can split commits, batch rename them, and you don’t have to stash your work first.
a page with my favourite git commands & tricks? [[git]] [[toblog]] [[exobrain]]
wsdiff
image diff
nbstirpout
iadd
extra worktree dir
The Communicative Value of Using Git Well – Math ∩ Programming [[git]]
I’ve written up my ideas, under the name ‘Literate Git’, at https://github.com/bennorth/literate-git if you’re interested.
The tool I wrote turns a structured git history into an interactive web page.
There’s an example there of how the ideas might work in a tutorial setting.
After I gave a talk on this work, one of the people in the audience tried it with the Haskell LLVM tutorial: https://lukelau.me/kaleidoscope/
[2019-08-02]
git - How do I remove a submodule? - Stack Overflow [[git]]
https://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule/21211232#21211232
git rm the_submodule
rm -rf .git/modules/the_submodule
[2019-12-11]
git reflog expire –expire=now –all && git gc –prune=now –aggressive [[github]]
[2019-05-10]
git rebase –committer-date-is-author-date –autostash HEAD~1 [[git]]
[2020-06-08]
Learn to change history with git rebase!
[2018-11-28]
extraction - How to extract one file with commit history from a git repo with index-filter & co - Stack Overflow [[git]]
git filter-branch --index-filter 'git read-tree --empty; git reset $GIT_COMMIT -- $your $files $here' -- --all --
[2019-04-10]
set up git project commmand
[2020-07-12]
- GitHub + why do we centralize issues, documents for a distributed version… | Hacker News
for an academic treatment of the defects in Git read: What's Wrong with Git? A Conceptual Design Analysis S. Perez De Rosso and D. Jackson. In Proceedings of the 2013 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming & Software (Onward! 2013)
[2018-01-01]
detect file type changes [[git]]
for r in *; do pushd $r; git whatchanged | grep "\.\.\..T"; popd; done
git ssh debugging [[git]] [[ssh]]
GIT_SSH_COMMAND='ssh -v' git fetch
[2021-01-11]
How to keep your Git history clean with interactive rebase | GitLab
[2020-11-16]
Why Git blame sucks for understanding WTF code (and what you should use instead) | Lobsters
For archeology I really love git gui blame despite its dated UI
[2019-07-21]
git - How do I remove a submodule? - Stack Overflow https://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule/7646931#7646931 [[git]]
he majority of answers to this question are outdated, incomplete, or unnecessarily complex.
A submodule cloned using git 1.7.8 or newer will leave at most four traces of itself in your local repo. The process for removing those four traces is given by the three commands below:
Git is a [[pull" title="[[https://en.wikipedia.org/wiki/Distributed_version_control | distributed version control system]]" class="wikilink">distributed version control system]]. It stores //whole objects//, not diffs, which is one of the key differences between Git and other version control systems of its time. This [[speeds up operations]] like checking out branches and processing commits in batch. //Distributed// means that while you can have a single source of truth, nothing will break when it goes down, because [[the whole object database is stored on users' machines]], and [[data integrity is easily verified]] (commits can also be signed using OpenPGP).
=> https://git-scm.com | Official website
= Collaboration
Collaboration with Git is done by sharing patches and pulling from other people's trees. This is how Linux kernel, PostgreSQL, Git and many other communities collaborate. Patches are usually sent by email using [[https://git-scm.com/docs/git-send-email | git-send-email]]
or formatted separately using [[https://git-scm.com/docs/git-format-patch | git-format-patch]]
. Sending pull requests (using [[https://git-scm.com/docs/git-request-pull | git-request-pull]]
) is preferred when patches get too big and it becomes impractical to send them as a series of emails. A good resource on that is [[https://git-send-email.io]], and [[u/handlerug]] recommends it to everyone interested in collaboration via email.
Relatively recently, a new way of collaboration has emerged. [[GitHub]], a centralized freemium hosting platform for Git repositories, launched in April 2008 and quickly eclipsed other services like SourceForge or OSDN and Git frontends like Cgit or Savannah. A huge rise in Git's popularity is also attributed to GitHub's launch. This platform uses //pull-requests// exclusively to merge trees: one clones a repository to their account (this action is called "forking"), pushes code changes to a new branch, then creates a pull request to the upstream repository using GitHub's web UI. Once everything is sorted out and the code is ready to get merged, upstream's collaborator with push access clicks the "Merge" button (which also offers options to squash or rebase commits). On top of that, this model provides extensive code review capabilities and CI/CD integration.
GitHub's pull requests and the platform have become so popular that nowadays Git and GitHub names are often used interchangeably (//"I just pushed some changes to Git", "Do you have a Git account?"//), and every developer is expected to have a GitHub account. The merging feature can be sometimes attributed to GitHub instead of Git itself. Various platforms like [[GitLab]] instances ([[FreeDesktop]], [[Alpine]], etc) and Gitea instances ([[Codeberg]]) exist, but all of them use the same familiar pull-request workflow. [[SourceHut]], a FOSS "hacker forge" platform largely written from scratch and providing many services for developers, [[launched "in alpha stage" on November 15, 2018]], and it uses collaboration by email as the main way of contributing to projects. [[u/handlerug]] doesn't know of any other platform that promotes email collaboration (and provides tools for the purpose, such as mailing list hosting and a web UI for sending patches).
= Links => https://matrix.to/#/!ORfrUEFeWFcHAMLFLr:matrix.org/$1644101095103BLdVu:grin.hu?via=matrix.org&via=matrix.allmende.io&via=privacytools.io | Matrix message by @grin => Péter Gervai
That is probably an inherent lazyness of me, for example I passionately hate
git
and pretty much likemercurial
, because the first was created by a dozen hackers to themselves, and nobody really understands it, and nobody else can really use it to its full potentials, and all the documentation and help pages are obscure, complex and generally written from the perspective of someone already knowing the system and being pretty annoyed that have to explain it to anyone else; mercurial on th eother hand has an excellend handbook, good structured help system, easy to use commands which can be very complex if someone take the time and efforts to learn it. And both systems are basically the same, do the same, using the same principles. The difference is the attitude towards the people not yet being fluent in the system. Also see: [[https://git-man-page-generator.lokaltog.net/]]
=> https://warmedal.se/~bjorn/posts/2021-09-20-finally-understanding-the-power-of-git.html | Finally Understanding the Power of Git
A platform like Github makes this different, in that it abstracts these tools into a web UI and expect all collaborators to have an account at the platform. The more I learn about ways of collaborating outside of a centralised service like that, the more I've come to dislike them. Decentralised collaboration is a lot more enjoyable and empowering.
=> https://blog.sulami.xyz/posts/cleaning-up-git-history/ | Cleaning Up Git History - sulami's blog
Cleaning up the history might seem tedious at first for marginal cosmetic benefits, but it gets much easier and faster with practice. Here I am collecting some tips for cleaning up a git commit history before publishing it to others, for example in the form of a pull request.
=> https://www.banterly.net/2021/07/31/new-in-git-switch-and-restore/ | New in Git: switch and restore
=> https://martowen.com/2016/05/01/git-submodules-vs-git-subtrees/ | Git Submodules vs Git Subtrees
Submodules are easier to push but harder to pull – This is because they are pointers to the original repository Subtrees are easier to pull but harder to push – This is because they are copies of the original repository
=> https://git-annex.branchable.com/
git-annex allows managing files with git, without checking the file contents into git. While that may seem paradoxical, it is useful when dealing with files larger than git can currently easily handle, whether due to limitations in memory, time, or disk space.
git-annex is designed for git users who love the command line. For everyone else, the git-annex assistant turns git-annex into an easy to use folder synchroniser.
=> https://ladycat.wordpress.com/2020/03/04/flashbake-автосохранение-в-git/ | Flashbake — автосохранение в git
Собственно, по-хорошему, тут надо начинать с того, что есть целая тема — «системы управления версиями», предназначенные вообще-то для программистов, но я уверена, что пишущим — не менее нужные. Из них я уже который год использую git.
=> https://ta180m.exozy.me/posts/gitea-actually-joins-the-fediverse/ | Gitea Actually Joins the Fediverse
Gitea federation development has reached a crucial milestone: federating with Mastodon! This is a //big deal//.
-
[[push]] [[git]]
- [[change remote]]
-
#push [[git]]
- [[merge vs rebase]]
Git Alias
- git config --global alias.co checkout
- git config --global alias.br branch
- git config --global alias.ci commit
- git config --global alias.F "reset --hard HEAD"
- [[pull]] [[git config]]
Git Ship
- public document at doc.anagora.org/git
- video call at meet.jit.si/git
2021 01 04
2021 01 06
2021 02 07
2021 04 01
2021 04 20
2021 05 02
2021 06 21
2021 07 18
2021 08 11
2022 03 18
2022 03 19
2022 10 29
2023 02 17
accepting_patches
agora
agora bot matrix
agora bridge
agora client
agora editor
agora ext
agora meet
agora pkg chapter
agora protocol
agora server
agora signup
aquila network
argh
armengol lorand
armengolaltayo
athens
atjson
bangle
betula_in_agora
blackbox exporter
botginia
bouncepaw
brig
cardigan bay
change remote
chezmoi
church of the singularity
code server
ctzn
ctzn network
datascript
decentralization
distributed knowledge graph
distributopia
dogsheep
dotfiles
dotlit
dotlit starter
dylan steck
ed summers
editar el agora
emacs
entr
exobrain
fediverse party
fellowship of the link
fission
flancia git
flancia meet
flancia meet notes
foam
forgefed
framadate
gather town
git bug
git on ipfs
git repository
gitbug
gitflow
gollum
goodtime
hometown
hpi
i3 resurrect
infragora
interlay
ipfs search
isomorphic git
jekyll wikilinks
lemmy
linus torvalds
logseq
massive wiki
matterbridge
me stack
misc
misskey
moa
monocle
mycorrhiza
nixos
node
noocene
open home
patterning
paul bricman
photoprism
pinafore
pkm
pleco
pleroma
pr
pratyush
promnesia
python
rdflib
readme
refusing to merge unrelated histories
searx
secondbrain
skills
snapshot
snapshots
software
solid
sourcehut
spritzle
standards positions
static_site
stoa sync
tabfs
the interlace
tiddlywiki
tools for thought interchange
tooty
track
treedoc
tridactyl
trustlamp
twitter bridge
unigraph
vault
wayland
web ext
welkin
wptools
yt dlp
yubnub
agora bridge
agora server
exobrain
git
git alias
git config
git ship
github
go/git/project
https //codeberg org | codeberg
https //drewdevault com/2018/11/15/sr ht general availability html | launched "in alpha stage" on november 15 2018
https //en wikipedia org/wiki/distributed_version_control | distributed version control system
https //git man page generator lokaltog net/
https //git scm com/about/distributed | the whole object database is stored on users machines
https //git scm com/about/info assurance | data integrity is easily verified
https //git scm com/about/small and fast | speeds up operations
https //git scm com/docs/git format patch | git format patch
https //git scm com/docs/git request pull | git request pull
https //git scm com/docs/git send email | git send email
https //git send email io
https //github com | github
https //gitlab alpinelinux org | alpine
https //gitlab com | gitlab
https //gitlab freedesktop org | freedesktop
linus torvalds
list
mercurial
repositories
sourcehut
ssh
toblog
u/handlerug
version control system