Question

Nous sommes dans le processus de migration de Mercurial à Git pour notre flux de travail et j'ai deux questions mineures.

Tout d'abord, est-il possible de "clone" un dépôt local directement dans un vide à distance (ssh) dir?

À l'heure actuelle, lorsque nous créons un nouveau site Web, nous copions essentiellement notre CMS localement, configurer et nous cloner sur le repo central et sur le serveur Web (hg clone . ssh://account@server/www). De cette façon, nous avons un accès instantané à push / pull bonté.

Cela me amène à la deuxième question, le déploiement à distance.

À l'heure actuelle avec Mercurial, j'ai des crochets simples dans les prises en pension à distance qui exécutent hg up lorsqu'un changeset est reçu.

Pour faire la même chose avec Git j'ai suivi les instructions ici: http://caiustheory.com/automatically-deploying-website-from-remote-git-repository mais je voudrais essayer de garder le répertoire .git dans la racine du site comme il est le cas Mercurial (il est protégé par config Apache et je ne peux pas exporter GIT_DIR pour tous les comptes que certains ont plus d'un site web / prises en pension).

Est-il possible d'avoir essentiellement la même configuration sans séparer le répertoire de travail des prises en pension?

Était-ce utile?

La solution

Pour répondre à votre première question, oui, vous le pouvez. Supposons que le répertoire distant est ssh://user@host/home/user/repo. Ce doit être un dépôt git, créez qu'avec git init --bare ou scp votre repo.git local (peut être créé avec git clone) annuaire à distance. Ensuite, faites:

git remote add origin ssh://user@host/home/user/repo
git push --all origin

Cela va pousser toutes les branches localement existantes au dépôt distant.

Pour se rendre à votre prochaine question, vous devriez être en mesure de faire la même chose en utilisant un ensemble de commandes différent. Essayez:

$ cd /var/www  # or wherever
$ mkdir somesite
$ cd somesite/
$ git init
$ git --bare update-server-info
$ git config receive.denycurrentbranch ignore
$ cat > hooks/post-receive
#!/bin/sh
git checkout -f
^D
$ chmod +x hooks/post-receive

Vous, bien sûr, exécutez les commandes à distance / push ci-dessus après cette étape. Vous devrez peut-être vérifier une branche spécifique après l'avoir fait, de sorte que le clone « de unsite » sur le serveur sait réellement quelle branche à suivre. A partir de là, poussée à ce référentiel devrait déclencher une nouvelle caisse de cette branche.

Autres conseils

J'ai aussi couru dans cette question récemment et résolu il suit que:

Le serveur distant:

1: Créer un répertoire / tmp / nu
2: Changement dans ce répertoire
3: Exécuter git initialisation --bare

Sur la machine locale:

1: Changement dans votre répertoire projet git
2: git ajouter à distance ssh nu: // user @ server / tmp / nu
3: git push --all nu
4: supprimer à distance git nu

Le serveur distant:

1: git clone / tmp / nu / chemin / vers / votre / clone

Sur la machine locale:

1: ssh origine remote add git: // user @ serveur / chemin / vers / votre / clone

Ceci est un peu en jeu, mais il fonctionne et ne nécessite aucun réglage des drapeaux étranges ou des instructions git pour remplacer ses comportements par défaut. Il est donc tout à fait sûr.

Cette réponse est bonne, mais je n'étais pas en mesure de le faire fonctionner pour moi. Le code suivant de ce lien a http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-push/ . Sur la course à distance

mkdir my_project.git
cd my_project.git
git init --bare
git-update-server-info # If planning to serve via HTTP

Localement sur un référentiel existant qui a déjà au moins un commit exécuter

git remote add origin git@example.com:my_project.git
git push -u origin master

J'espère que cela aide quelqu'un qui a eu des problèmes avec l'autre réponse.

git équivalent à Easiest hg clone . ssh://account@server/www est:

rsync -avz . ssh://account@server/www/reponame

En fait, je l'ai ajouté cette ligne à ~ / .bash_aliases pour refléter tout partout répertoire:

alias mirror="rsync -avz . ssh://account@server`pwd` --delete"

Il pourrait se révéler dangereux si vous arrive d'être dans un répertoire spécial / dev ou / bin. Faites attention.

Je suis d'accord avec, et améliorer presto8 en supprimant les fichiers inégalés.

rsync -avz . ssh://account@server/www/reponame --delete

Juste pour vous donner une alternative, vous pouvez utiliser:

git remote set-url origin git://other.url.here

Ces travaux aussi si votre respository git locale pointe vers un autre dépôt distant

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top