Contrôle de version de fichiers individuels à l'aide de GitHub Gist

image

Il arrive souvent qu'un développeur accumule au fil du temps une collection de code qu'il utilise dans ses projets.

Il utilise certains scripts dans certains projets, d'autres dans d'autres.

Ces scripts sont améliorés au fil du temps, les bogues sont supprimés et optimisés. Par conséquent, la question se pose de savoir comment synchroniser les nouvelles versions de scripts avec celles des projets .

Il existe plusieurs options:

La première option:

Créez un référentiel et placez-y tous les scripts. Ensuite, ce référentiel est connecté en tant que sous-module au projet et utilisé.

Inconvénients:

  1. Tous les scripts, y compris ceux inutiles, sont copiés dans le projet.
  2. le sous-module n'est pas validé dans le référentiel du projet, donc si le référentiel distant du sous-module n'est pas disponible, nous ne pourrons pas télécharger l'intégralité du projet.

La deuxième option:

Chaque script doit être stocké séparément sur Github gist et connecté selon les besoins en tant que sous-modules
Le moins est le même que dans la première version du deuxième paragraphe.

La troisième option:

Utilisez Git Subtree.

(Cette solution est une alternative aux sous-modules Git)

La sous - arborescence Git est une autre méthode de fusion de branches. Son idée est qu'ayant deux branches, git comprendra qu'une branche n'est pas une variation de l'autre, mais un ajout.

Idée générale:

  1. - ajouter le fichier à Github gist (un mini-dépôt est généré)
  2. - lier le mini-référentiel à notre projet en tant que branche distincte
  3. - attribuer un dossier à cette branche
  4. - dégonfler.
  5. - puis on travaille comme avec une branche régulière (fusion, commit, fetch ...)

Maintenant, détails sur l'utilisation des extensions Git.

1) Nous publions notre fichier avec le code sur https://gist.github.com où nous pouvons immédiatement obtenir un lien vers le "mini" référentiel:

image

Ouvrez le référentiel de notre projet dans GitExtensions et sélectionnez:

[Référentiel] -> [Référentiels distants ...]

image

Nous nous connectons en tant que branche distincte.

Pour ce faire, appuyez sur [+] . Saisissez [Nom] , [Url] et enregistrez [Enregistrer les modifications] :

$git remote add "Util1" "https://gist.github.com/cf056e792d3bd9c2fc5973b846efe3d3.git" 

image

Nous voyons que nous sommes connectés au référentiel distant.

Ensuite, nous devons associer cette branche à un dossier spécifique dans notre projet afin que le fichier y soit copié.

Pour ce faire, ouvrez Git-bash (ctrl + G) et exécutez la commande:

 $git read-tree --prefix=Client/Assets/ -u Util1/master 

où:

Client / Actifs / - chemin vers le dossier dans lequel le fichier sera copié
Util1 / master - le nom de la branche du référentiel distant
(Je n'ai pas trouvé de chemin à travers l'interface utilisateur)

La branche gist est attachée à notre dossier dans le projet. Et le dossier est déjà là.

Maintenant, nous pouvons travailler comme avec une branche régulière.

Par exemple, si un fichier change dans Gist, nous pouvons obtenir une nouvelle version:

Nous récupérons tout et voyons tous les changements:

 $git fetch --progress "--all" 

Ensuite, nous fusionnons pour combler les changements dans notre branche:

 $git merge -s subtree --no-ff --allow-unrelated-histories Util1/master 

image

image

Résultat:

image

Information complémentaire:

https://git-scm.com/book/en/v1/Tools-Git-Merging-trees
https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree
https://www.nwcadence.com/blog/git-subtrees

Source: https://habr.com/ru/post/fr419925/


All Articles