Git: Difference between revisions

imported from old wiki
Kaya (talk | contribs)
Replace deprecated extraConfig with settings
 
(10 intermediate revisions by 6 users not shown)
Line 1: Line 1:
[https://en.wikipedia.org/wiki/Git_(software) 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.  
[https://en.wikipedia.org/wiki/Git_(software) Git] is the version control system (VCS) developed by Junio C Hamano and designed by Linus Torvalds (creator of linux kernel). Git is used to maintain NixOS packages, as well as many other projects, including sources for the Linux kernel.  


== Installation ==
== Installation ==
Line 16: Line 16:


== Configuration ==
== Configuration ==
Git can be configured using [[Home Manager]]:
Git can be configured using [[Home Manager]]:


Line 22: Line 21:
   programs.git = {
   programs.git = {
     enable = true;
     enable = true;
     userName = "John Doe";
     settings.user = {
    userEmail = "johndoe@example.com";
        name = "John Doe";
        email = "johndoe@example.com";
    };
   };
   };
</syntaxhighlight>
</syntaxhighlight>
Line 32: Line 33:
   programs.git = {
   programs.git = {
     enable = true;
     enable = true;
     aliases = {
     settings.alias = {
       ci = "commit";
       ci = "commit";
       co = "checkout";
       co = "checkout";
Line 50: Line 51:
Configure git-credential-helper with libsecret:
Configure git-credential-helper with libsecret:


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">{ pkgs, ... }:
{ pkgs, ... }:


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


For example to add additional configuration you can specify options in an attribute set, so to add something like this:
For example to add additional configuration you can specify options in an attribute set, so to add something like this:
Line 80: Line 78:
   programs.git = {
   programs.git = {
     enable = true;
     enable = true;
     extraConfig = {
     settings = {
       push = { autoSetupRemote = true; };
       push = { autoSetupRemote = true; };
     };
     };
Line 86: Line 84:
}
}
</syntaxhighlight>
</syntaxhighlight>
=== Using your public SSH key as a signing key ===
You can naturally configure git to automatically sign your commits using your public SSH key like so:<syntaxhighlight lang="nix">
{
  programs.git = {
    enable = true;
    signing = {
      key = "ssh-ed25519 AAAAAAAAAAAA...AA username@hostname";
      signByDefault = true;
    };
    settings = {
      gpg = {
        format = "ssh";
      };
    };
  };
}
</syntaxhighlight>However, note that this will also require Home Manager to manage your SSH configuration:<syntaxhighlight lang="nix">{   
  programs.ssh = {
    enable = true;
    addKeysToAgent = "yes";
  };
}</syntaxhighlight>


== Management of the <code>nixpkgs</code> git repository ==
== Management of the <code>nixpkgs</code> git repository ==


<code>nixpkgs</code> 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.
<code>nixpkgs</code> has become a git repository of quite substantial size with > 889 000 commits (as of late 2025). 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 ===
Line 182: Line 203:


[[Category:Applications]]
[[Category:Applications]]
[[Category:CLI Applications]]
[[Category:Version control]]
[[Category:Version control]]