Git: Difference between revisions

From NixOS Wiki
imported>Gmfawcett
m mention `gitFull` package to fill in missing GUI commands
imported>Nix
m add Software/Applications subcategory
Line 60: Line 60:


worked well on a machine with about 6–8 GB of free RAM and two processor threads, and reduced the size of the <code>nixpkgs</code> checkout from ~1.3 GB to ~0.95 GB.
worked well on a machine with about 6–8 GB of free RAM and two processor threads, and reduced the size of the <code>nixpkgs</code> checkout from ~1.3 GB to ~0.95 GB.
[[Category:Applications]]

Revision as of 05:50, 20 September 2021

Git is the version control system (VCS) designed and developed by Linus Torvalds, the creator of the Linux kernel. Git is used to maintain NixOS packages, as well as many other projects, including sources for the Linux kernel.

Installation

Install the git package.

Additional features

Install tk to use the git gui:

git citool

Or you may wish to install the gitFull package, which includes git gui, gitk, etc.

Configuration

Git can be configured using Home Manager:

  programs.git = {
    enable = true;
    userName  = "John Doe";
    userEmail = "johndoe@example.com";
  };

Configure git-credential-helper with libsecret:

{ pkgs, ... }:

{
  programs.git = {
    enable = true;
    extraConfig = {
      credential.helper = "${
          pkgs.git.override { withLibsecret = true; }
        }/bin/git-credential-libsecret";
    };
  };
}

Management of the nixpkgs git repository

nixpkgs has become a git repository of quite substantial size with > 160 000 commits (as of early 2019). This brings many unoptimized tools to their limits, leading to long waiting times on certain operations. Here we’ll collect useful info on how to manage that.

git

git itself might not perform as usual with the default settings

git-gc

Normal git gc should work as usual, but you should force a full garbage collect every half a year or so. git gc --aggressive is the command for that. For the author it did not work on the first try, since their laptop’s memory was too small and it went out of memory. According to StackOverflow answer it suffices to set some local repository config variables.

git config pack.windowMemory 2g
git config pack.packSizeLimit 1g

worked well on a machine with about 6–8 GB of free RAM and two processor threads, and reduced the size of the nixpkgs checkout from ~1.3 GB to ~0.95 GB.