-
1. Démarrage rapide
-
2. Les bases de Git
-
3. Les branches avec Git
-
4. Git sur le serveur
- 4.1 Protocoles
- 4.2 Installation de Git sur un serveur
- 4.3 Génération des clés publiques SSH
- 4.4 Mise en place du serveur
- 4.5 Démon (Daemon) Git
- 4.6 HTTP intelligent
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git hébergé
- 4.10 Résumé
-
5. Git distribué
-
6. GitHub
-
7. Utilitaires Git
- 7.1 Sélection des versions
- 7.2 Indexation interactive
- 7.3 Remisage et nettoyage
- 7.4 Signer votre travail
- 7.5 Recherche
- 7.6 Réécrire l’historique
- 7.7 Reset démystifié
- 7.8 Fusion avancée
- 7.9 Rerere
- 7.10 Déboguer avec Git
- 7.11 Sous-modules
- 7.12 Empaquetage (bundling)
- 7.13 Replace
- 7.14 Stockage des identifiants
- 7.15 Résumé
-
8. Personnalisation de Git
- 8.1 Configuration de Git
- 8.2 Attributs Git
- 8.3 Crochets Git
- 8.4 Exemple de politique gérée par Git
- 8.5 Résumé
-
9. Git et les autres systèmes
- 9.1 Git comme client
- 9.2 Migration vers Git
- 9.3 Résumé
-
10. Les tripes de Git
- 10.1 Plomberie et porcelaine
- 10.2 Les objets de Git
- 10.3 Références Git
- 10.4 Fichiers groupés
- 10.5 La refspec
- 10.6 Les protocoles de transfert
- 10.7 Maintenance et récupération de données
- 10.8 Les variables d’environnement
- 10.9 Résumé
-
A1. Annexe A: Git dans d’autres environnements
- A1.1 Interfaces graphiques
- A1.2 Git dans Visual Studio
- A1.3 Git dans Visual Studio Code
- A1.4 Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git dans Sublime Text
- A1.6 Git dans Bash
- A1.7 Git dans Zsh
- A1.8 Git dans PowerShell
- A1.9 Résumé
-
A2. Annexe B: Embarquer Git dans vos applications
- A2.1 Git en ligne de commande
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Commandes Git
- A3.1 Installation et configuration
- A3.2 Obtention et création des projets
- A3.3 Capture d’instantané basique
- A3.4 Création de branches et fusion
- A3.5 Partage et mise à jour de projets
- A3.6 Inspection et comparaison
- A3.7 Débogage
- A3.8 Patchs
- A3.9 Courriel
- A3.10 Systèmes externes
- A3.11 Administration
- A3.12 Commandes de plomberie
A2.4 Annexe B: Embarquer Git dans vos applications - go-git
go-git
Au cas où vous souhaiteriez intégrer Git dans un service écrit en Golang, il existe aussi une implantation de bibliothèque en pur Go. Cette implantation n’a aucune dépendance native et n’est donc pas susceptible de contenir des erreurs de gestion manuelle de mémoire. Elle est aussi transparente pour l’outillage standard d’analyse de performance de Golang tel que CPU, profileurs Memory, détecteurs de conditions de compétition, etc.
go-git est ciblé sur l’extensibilité, la compatibilité et gère la plupart des APIs de plomberie, qui sont documentées sur https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md.
Voici un exemple simple d’utilisation des API Go :
import "github.com/go-git/go-git/v5"
r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{
URL: "https://github.com/go-git/go-git",
Progress: os.Stdout,
})
Dès que vous avez une instance de Repository
, vous pouvez accéder à ses informations et procéder à des modifications :
// retrieves the branch pointed by HEAD
ref, err := r.Head()
// get the commit object, pointed by ref
commit, err := r.CommitObject(ref.Hash())
// retrieves the commit history
history, err := commit.History()
// iterates over the commits and print each
for _, c := range history {
fmt.Println(c)
}
Fonctionnalités avancées
go-git a quelques fonctions avancées notables, dont une est un système de stockage modulaire, qui est similaire aux moteurs Libgit2. L’implantation par défaut est le stockage en mémoire, qui est extrêmement rapide.
r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
URL: "https://github.com/go-git/go-git",
})
Le stockage enfichable fournit de nombreuses options intéressantes. Par exemple, https://github.com/go-git/go-git/tree/master/_examples/storage vous permet de stocker des références, des objets, et la configuration dans une base de données Aerospike.
Un autre fonctionnalité est une abstraction flexible de système de fichier. En utilisant https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#Filesystem il est simple de stocker tous les fichiers de différentes manières, par exemple, en les empaquetant tous dans un archive unique sur un disque ou en les conservant en mémoire.
Une autre utilisation avancée inclut un client HTTP hautement paramétrable, tel que celui de https://github.com/go-git/go-git/blob/master/_examples/custom_http/main.go.
customClient := &http.Client{
Transport: &http.Transport{ // accept any certificate (might be useful for testing)
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
Timeout: 15 * time.Second, // 15 second timeout
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse // don't follow redirect
},
}
// Override http(s) default protocol to use our custom client
client.InstallProtocol("https", githttp.NewClient(customClient))
// Clone repository using the new client if the protocol is https://
r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url})
Pour plus d’informations
Une couverture complète des capacités de go-git dépasse le cadre de ce livre. Si vous souhaitez plus d’information sur go-git, la documentation de l’API se trouve sur https://pkg.go.dev/github.com/go-git/go-git/v5, et en ensemble d’exemples d’utilisation sur https://github.com/go-git/go-git/tree/master/_examples.