Je souhaite utiliser le contrôle de version, mais pour des raisons de sécurité, le serveur sur lequel je travaille n'a pas d'accès Internet: je ne peux déplacer des fichiers que sur une clé USB. Puis-je toujours utiliser Git avec cette configuration? Puis-je créer de petits correctifs que je peux appliquer sur un référentiel Git?
84
server
pour désigner une machine qui n'est connectée à aucun réseau. Ce pourrait être juste un réseau local même sans accès à Internet mais c'est quand même un réseau.Réponses:
Bien sûr, rien dans Git n’exige de protocole particulier. Le client standard prend immédiatement en charge HTTP (S), SSH, le protocole Git personnalisé et, ce qui est important, le protocole local . Cela prend juste un chemin vers un
.git
répertoire local , qui peut être dans un répertoire de travail (/path/to/project/.git
) ou simplement un répertoire nu (/path/to/project.git
), bien que le nommage ne soit qu'une convention.Cela signifie que vous pouvez bien sûr ajouter un lecteur flash comme télécommande:
ou sous Windows:
Ou même l'ajouter comme une télécommande supplémentaire avec un nom différent (si vous préférez
origin
pointer vers un serveur Internet quelque part):Ensuite, vous pouvez simplement pousser / tirer vers / depuis cette télécommande comme une autre.
Si vous lisez la documentation , vous remarquerez qu'il existe également un
file://
protocole qui se comporte légèrement différemment. Il est recommandé d’utiliser un chemin local car cela utilisera des optimisations supplémentaires - si vous utilisez lefile://
protocole, alors git utilisera des composants réseau standard (pour parler au disque local), ce qui est plus lent.la source
file://
est aussi un peu plus flexible. Il vous permet d’utiliser certaines fonctionnalités (telles que des clones superficiels) que vous ne pouvez pas utiliser avec un chemin local.Sur un seul ordinateur, rien de spécial n'est nécessaire. Exécutez
git init
le répertoire souhaité et travaillez avec Git comme vous le feriez normalement.Pour synchroniser un référentiel sur plusieurs ordinateurs, il existe plusieurs méthodes.
Méthode 1a (pas de réseau du tout): vous pouvez créer un «référentiel nu» sur la clé USB, puis y appuyer et en extraire comme vous le feriez avec tout autre référentiel distant. En d'autres termes, les opérations de référentiel via des chemins locaux ne sont pas différentes des opérations via des URL SSH ou HTTPS.
Créez un référentiel 'distant':
Dans l'ordinateur 1, tout y est:
Dans l'ordinateur 2, bien, comme toujours.
(Vous pouvez également pousser / récupérer / extraire directement depuis une URL ou un chemin.)
Méthode 1b (réseau interne): Si vous avez un serveur interne avec SSH disponible et si Git est installé, vous pouvez procéder comme ci - dessus , il vous suffit de spécifier une adresse SSH à l'aide de la syntaxe
[user@]host:path
oussh://[user@]host/path
.Créez un référentiel 'distant' en s'exécutant
git init --bare <somepath.git>
sur le serveur désigné (via SSH).Dans l'ordinateur 1, de la même manière que démontré précédemment.
Ou si vous préférez:
Dans l'ordinateur 2, encore la même chose que la méthode 1a.
Méthode 2: vous pouvez créer des «ensembles de transfert» qui archivent une liste donnée de commises dans un seul fichier.
Malheureusement, les commandes de regroupement ne se souviennent pas automatiquement de ce qui était déjà groupé la dernière fois. Il est donc nécessaire de marquer manuellement ou de conserver les notes. Je prendrai juste les exemples du manuel de git-bundle.
Sur l’ordinateur 1, créez un ensemble de toute la branche:
Dans l'ordinateur 2, tirez de la liasse comme s'il s'agissait d'un référentiel:
Les paquets suivants ne doivent pas nécessairement être emballés
master
- ils peuvent uniquement emballer les commits récemment ajoutéslast-bundled..master
.Dans l’ordinateur 1, créez un ensemble des nouveaux commits ajoutés:
Comme ci-dessus.
la source
manual tagging or note-keeping is needed
, une option à moins que le repo soit très volumineux estgit bundle create my.bundle --all
.git/
dossier caché), sans "arbre de travail" (les fichiers modifiables). C'est la forme préférée pour les référentielsgit push
.git bundle create
L’une des méthodes consiste à utiliser le stockage externe pour échanger des données entre des référentiels: git bundle . De cette façon, vous ne disposez que de fichiers uniques pour chaque transfert, et non de référentiels Git intermédiaires.
Chaque "git push" se transforme en création d'un fichier, "git fetch" récupère les éléments de ce fichier.
Session de démonstration
Créer le premier dépôt et faire le premier "push"
"clonage" vers le deuxième référentiel (c.-à-d. le deuxième ordinateur):
Faire quelques changements et les "pousser" dans un autre fichier bundle:
"extraire" les modifications dans le premier référentiel:
Contrairement au premier paquet, le second ne contient qu'un historique partiel de Git et n'est pas directement clonable:
Il est désavantageux d'utiliser des ensembles dont vous avez besoin pour spécifier manuellement la plage de validations que chaque ensemble doit contenir. Contrairement à
git push
,git bundle
ne garde pas trace de ce qui était dans le paquet précédent, vous devez ajuster manuellementrefs/remotes/origin/master
ou les paquets seraient plus gros que ce qu’il pourrait être.la source
--all
drapeau pour tout avoir. Si le dépôt est suffisamment petit, il s'agit du processus le plus simple, car vous transférez tout simplement à chaque fois! Juste ne perdez pas la clé USB - probablement le plus gros problème de sécurité!Vous devez d'abord installer Git . Ensuite, pour créer un nouveau référentiel, exécutez-le dans le dossier que vous avez copié:
Vous pouvez ensuite ajouter les fichiers pour lesquels vous souhaitez contrôler la version
git add
(ajouter-a
pour tous les fichiers) et commencer à valider les modifications (git commit
).Vous n’avez pas à appuyer sur une télécommande, vous pouvez travailler sur votre historique local (
git log
).Pour plus d'informations, consultez:
git
- le guide simplePousser / tirer sans internet
En utilisant la
git push
commande, il est possible de pousser sur SSH (en utilisant la connexion locale, intranet):ou en poussant dans le dossier:
Cela suppose que vous ayez deux copies de votre référentiel.
La même chose avec tirer, par exemple
Patcher
Pour appliquer des correctifs, vous pouvez utiliser la
patch
commande ougit apply
.Voir: Créer un fichier de correctif ou un fichier diff à partir du référentiel git et l'appliquer à un autre référentiel git différent .
la source
Vous pouvez aussi utiliser Git localement. Ensuite, vos commits ne sont stockés que localement et vous avez toujours le contrôle de version (et pouvez différer / fusionner, etc.), mais vous ne pouvez tout simplement pas accéder au référentiel à partir d’un autre ordinateur.
Vous pouvez démarrer un référentiel Git local en l'exécutant
git init
dans votre dossier local. Comme décrit ici .la source