-
18 votes
-
Radicle 1.0 — An open source, peer-to-peer code collaboration stack built on Git
6 votes -
Forgejo is now copyleft, just like Git
20 votes -
Have you tried Fossil scm, an alternative to git?
Have any of you tried out fossil as an alternative to git? I have been using it for about a week, and I think I am in love. I have used git for years, since having some sort of source control is...
Have any of you tried out fossil as an alternative to git? I have been using it for about a week, and I think I am in love. I have used git for years, since having some sort of source control is absolutely essential in programming. But I never liked git or felt comfortable using it. Within a week of messing with fossil, I feel like I understand it and can use it without a guide or external tools. It also has an issue tracker, forums, and a wiki built in.
I recommend reading all of that, especially section 2.5. Their description of cathedral style development lines up much more closely to everything I have worked on than git's bazaar style. Another thing I love is the ability to have the same repo open in multiple different folders at the same time. Basically everything about fossil lines up much more closely with what I think a source control program should be, at least for my use.
24 votes -
Investigating how a git repository stores the old versions of files
21 votes -
Git for Beginners: Zero to Hero
28 votes -
Best, favorite, and/or interestingly-different resources to learn (or re-learn) Git?
Pretty much, the title. I have been coding professionally for over 2 decades, been using Git for almost as long ... and to this day, it still feels alien and uncomfortable to use. I keep feeling...
Pretty much, the title.
I have been coding professionally for over 2 decades, been using Git for almost as long ... and to this day, it still feels alien and uncomfortable to use. I keep feeling like I am relearning it all over again. I would really like to find some kind of different resource that helps me to make Git "stick" in my brain, and become more intuitive. Maybe that's just not possible, but I keep hoping.
Meanwhile, my roommate is just starting her journey into programming, and her class just started teaching Git ... and I'm eavesdropping a bit, and they're teaching it okay, but I'm sure there are better tutorials out there for a newcomer.
I am aware of -- and currently reading my way through -- both this recent tildes post and the various tutorials mentioned in it. But I am looking for other recommendations, as well ... and I bet I'm not the only one.
Thanx in advance.
19 votes -
Codeberg launches Forgejo, a drop-in replacement for Gitea
11 votes -
Commits in Git are snapshots, not diffs
4 votes -
Radicle -- A peer-to-peer stack for building software together
16 votes -
Sublime Merge 2 - Features and Flexibility
12 votes -
Please stop recommending Git Flow
9 votes -
(ESR) Notes on the Go translation of Reposurgeon
8 votes -
Richard Hipp - Git: Just Say No
7 votes -
Git ransom campaign incident report—Atlassian Bitbucket, GitHub, GitLab
14 votes -
Learn to use email with git
11 votes -
Make Emacs write (part of) your git commit messages
I was fed up with the chores of writing consistent git commit messages, so a while ago I started developing a hook in Emacs which I used with Magit (actually git-commit-mode) which uses some crude...
I was fed up with the chores of writing consistent git commit messages, so a while ago I started developing a hook in Emacs which I used with Magit (actually
git-commit-mode
) which uses some crude heuristics to fill out theCOMMIT_EDITMSG
buffer for me. Here is what it does (|
stands for the cursor):-
If only a single file modified, insert
<filename>: |
- If can figure out function name, insert
<filename> (<functionname>): |
- If can figure out function name, insert
-
If only a single file added, insert
Add <filename>|
-
If a
TODO
added toReadme.org
, insert; TODO <headline>|
-
If a
TODO
wasDONE
, insert; DONE <headline>|
-
If the files are
Readme.org
andReadme.org_archive
, and no new TODO's were added anywhere, insert; Archive DONE|
-
If the file is
.gitignore
, insert; Ignore |
-
If the file is
TAGS
, insert; Update TAGS|
I extend this when I find new cases where I repeatedly do the same thing. The code is below. It's probably a good idea to use it as a starting point and personalise it because this reflects how I like to write my commit messages (and I like pretending how they do it over at Emacs git repo). It is sloppy and probably buggy, but I don't think it can be destructive.
Final note: I can't figure out how to set this up so that after this takes effect, the buffer is marked as modified. I want to flip the modified bit so that in some cases I can just hit
C-c C-c
and go. But I need to modify the buffer somehow to commit in some cases (I just typeC-o
to open a new line in those cases). Here is the function:(defun gk-git-commit-mode-hook () "Set up git commit buffer." ;; If a single file is modified, prefix the message w/ it. (let ((modified-re "^# modified:") (new-re "^# new file:") (issue-re "^[+\\- ]\\*+ \\(TODO\\|DONE\\) ") current-defun filename addp onlyp issuep) (save-excursion (with-current-buffer "COMMIT_EDITMSG" (goto-char (point-min)) (re-search-forward "^# Changes to be committed:" nil t) (forward-line) (beginning-of-line) (cond ((looking-at modified-re) (re-search-forward ": " nil t) (setf filename (thing-at-point 'filename t))) ((looking-at new-re) (re-search-forward ": " nil t) (setf filename (thing-at-point 'filename t) addp t))) (setq onlyp (progn (forward-line) (not (or (looking-at modified-re) (looking-at new-re))))) (when (and onlyp (equal filename "Readme.org")) (goto-char (point-min)) (when-let* ((pos (re-search-forward issue-re nil t))) (setq issuep (progn (re-search-backward "\\*" nil t) (buffer-substring (1+ (point)) (line-end-position)))))) ;; Try to set ‘current-defun’. (when onlyp (save-excursion (goto-char (point-min)) ;; Error if not found, means verbose diffs ;; not enabled. (re-search-forward "^diff --git") (goto-char (line-beginning-position)) (let ((str (buffer-substring (point) (point-max))) (default-directory (expand-file-name ".."))) (with-temp-buffer (insert str) (diff-mode) (goto-char (point-min)) (setq current-defun (diff-current-defun)))))))) (if onlyp (cond ((and issuep (not addp)) (goto-char (point-min)) (insert ";" issuep)) ((equal filename "TAGS") (goto-char (point-min)) (insert "; Update TAGS")) ((equal filename ".gitignore") (goto-char (point-min)) (insert "; Ignore ")) (filename (goto-char (point-min)) (if addp (insert "Add " filename) (insert filename (if (and current-defun) (format " (%s)" current-defun) "") ": ")))) (when (and (equal filename "Readme.org") (save-excursion (goto-char (point-min)) (re-search-forward (concat modified-re " +Readme.org_archive") nil t)) (save-excursion (goto-char (point-min)) (re-search-forward "\\-\\*+ DONE" nil t)) (not (save-excursion (goto-char (point-min)) (re-search-forward "\\+\\*[\\+\\-] TODO" nil t)))) (goto-char (point-min)) (insert "; Archive DONE"))))) (add-hook 'git-commit-mode-hook #'gk-git-commit-mode-hook)
Hope you find it useful.
12 votes -
-
Write Yourself A Git - write your own version control to help understand git internals
7 votes -
Fossil: VCS with integrated wiki, bug tracking, forums, and technotes; by the author of SQLite
10 votes -
sr.ht is now sourcehut
17 votes -
sr.ht, the hacker's forge, now open for public alpha
33 votes -
Sublime Merge - a new Git client, from the makers of Sublime Text
26 votes -
Scaling Mercurial at Facebook (2014)
7 votes -
What's in a git repo?
Okay, I know the obvious answer is the history of the files. But how can I, from the command line, really understand what is hiding inside that .git directory? Today I was doing one of my periodic...
Okay, I know the obvious answer is the history of the files. But how can I, from the command line, really understand what is hiding inside that .git directory?
Today I was doing one of my periodic disk space audits, trying to figure out where my usage goes. This comes from having a 64GB drive mounted as /home on my Linux laptop. I found some 15G of old video files to delete today, so I'm no longer as pressed for space. But my interest was piqued by one thing I have downloaded from Github that is ~120 megs for a very simple program. Poking around further I find that most of that usage is a single file:
$ ls -lh withExEditorHost/.git/objects/pack/pack-df07816cd15fb091439112029c28ebc366501652.pack -r--r--r-- 1 elijah elijah 102M Mar 14 23:28 withExEditorHost/.git/objects/pack/pack-df07816cd15fb091439112029c28ebc366501652.pack $ file withExEditorHost/.git/objects/pack/pack-df07816cd15fb091439112029c28ebc366501652.pack withExEditorHost/.git/objects/pack/pack-df07816cd15fb091439112029c28ebc366501652.pack: Git pack, version 2, 299 objects $
Is there a
unzip
ortar xzf
equivalent for Git pack files? Naive usage ofgit unpack-file
is only generating errors for me.17 votes -
Supercharging the Git Commit Graph
6 votes