De SVN Ã Git


#1

Bonjour,

Je sais que ça n’a pas de rapport avec Rails, mais j’ai un projet pour
lequel j’utilise SVN mais j’ai plein de problème et je n’arrive pas à
m’en sortir. Ca fait quelque temps que je songe à passer à Git qui
semble plus simple (surtout que de ce que j’ai compris, il ne génère
pas un répertoire .svn dans chaque dossier mais uniquement à la racine
du projet).

Ayant dit ça mon problème est de savoir quel est le meilleur moyen de
passez à Git, sachant que mon repository SVN distant n’est plus à jour
(et je n’arrive pas à le recaler) et que seul ce que j’ai en local sur
mon ordi est bon (mais avec tous les dossiers .svn).

Merci d’avance
Nicolas


#2

Du moment que tu as un repository svn tu peux importer tout son
contenu (historique compris) dans un repository git.

Pour ça, le mieux est déjà de faire un fichier qui va “mapper” les
utilisateurs svn vers des utilisateurs git, la syntaxe est simplissime
:
login_sous_svn = Nom Sous G. removed_email_address@domain.invalid

Puis d’importer le repository :
git svn --authors-file=/la/ou/tu/as/mis/ta/liste_des_utilisateurs.txt
clone svn://ou_est_range.net/ton/projet/sous/svn
nom_a_donner_a_ton_nouveau_projet_git

Michel B.

2009/12/27 Tranquiliste removed_email_address@domain.invalid


#3

Merci Michel,

Mon problème est que c’est la grouille dans mon repository et que seul
ce que j’ai en local est bon.
Je vais lire un ou 2 doc git pour comprendre comment ça marche et
comment alimenter un repository distant à partir de mon ordi.

Nicolas

On 28 déc, 11:09, Michel B. removed_email_address@domain.invalid


#4

Tout dépend si tu veux perdre l’historique ou pas, mais si j’étais
toi, même si “ça grouille” dans ton dépôt rien ne t’empêche de faire
un commit avec ton état actuel et d’importer l’historique, ce sera
plus propre de tout point de vue.

Maintenant, comment faire un git à partir d’un projet sous svn, c’est
très simple :

$ cp -R /la/ou/est/ton/projet /la/ou/on/va/faire/le/depot/git
$ cd /la/ou/on/va/faire/le/depot/git
$ find ./ -name .svn -exec rm -Rf {} ;
$ git init
$ touch .gitignore

Ici, si j’étais toi, j’éditerais le .gitignore pour préciser quels
fichiers git ne doit jamais versionner, genre les fichiers de
configuration où il y a des passwords, etc. La façon “propre” de
fournir des fichiers de configuration par défaut c’est comme sous svn,
on donne un fichier d’exemple (par exemple au lieu de
config/database.yml je versionne un config/database.exemple.yml et
j’ignore le config/database.yml, et quand je clone le dépôt je cherche
tous les fichiers .exemple., je les duplique en enlevant le .exemple
au milieu et je les édite avec les bonnes valeurs locales).

$ git add .
$ git commit -m “Migration de svn vers git.”

Et hop, tu as un dépôt git tout fonctionnel avec tout dedans, et en
supposant que tu as un dépôt github :

$ git remote add origin removed_email_address@domain.invalid:WhoeverYouAre/WhateverProject
$ git push origin master

Voilà, ton master est sur le dépôt gihub.

Michel B.

2009/12/29 Tranquiliste removed_email_address@domain.invalid:


#5

2009/12/30 Frédéric Logier removed_email_address@domain.invalid:

$ cd /la/ou/on/va/faire/le/depot/git
$ find ./ -name .svn -exec rm -Rf {} ;

svn export leprojetsvn leprojet

c’est plus propre :slight_smile:

Ouais mais je ne sais pas pourquoi depuis que j’utilise git voir svn
en début de commande me fout des migraines ophtalmiques. Peut-être un
cancer du cerveau sélectif.

Michel B.


#6

Le mardi 29 décembre 2009 à 10:47 +0100, Michel B. a écrit :

$ find ./ -name .svn -exec rm -Rf {} ;
svn export leprojetsvn leprojet

c’est plus propre :slight_smile:


#7

Merci des ces informations.

Comme je vais faire des essais la semaine prochaine


#8

Bonjour,

Je commence à utiliser git, mais je me pose la question (avant de
faire un push sur mon remote repository) de savoir comment ignorer des
fichiers après coup (j’ai déjà fait un commit).
Dans le .gitignore à la racine, j’ai mis, entre autre: public/uploads/
** (pour éviter que ce répertoire et ses sous répertoires ne soient
envoyés) mais je ne sais pas si ça marche.
Est ce que j’ai utiliser la bonne méthode (je ne suis pas sur de la
syntaxe)?Y a-t-il un moyen de vérifier?

Merci


#9

Le 06/01/10 10:30, Alexis P. a écrit :

On peux supprimer le cache de ce ficher dans le repo

git rm my_file --cached

à ce moment le fichier est supprimé du repo mais pas de ton
arborescence.

** (pour éviter que ce répertoire et ses sous répertoires ne soient
envoyés) mais je ne sais pas si ça marche.
Est ce que j’ai utiliser la bonne méthode (je ne suis pas sur de la
syntaxe)?Y a-t-il un moyen de vérifier?

le .gitignore empeche juste que ca soit vu lorsque tu fais un git status
ou git add globale. Dans la pratique il n’empêche aucun ajout de fichier
lors d’un commit. Ça ne joue que sur le passage de unversionned Ã
unstage/stage.


#10

faut rajouter dans .gitignore
/public/uploads/*

Mais dans mon experience, si les fichiers ont deja ete commité, meme
si les repertoires sont dans .gtignore ils vont se retrouver dans
github
seul moyen que j’ai trouvé pour les enlever de github et de les
supprimer en local puis de re-commiter

mais il y a surement plus propre

On Jan 5, 10:44Â pm, Tranquiliste removed_email_address@domain.invalid


#11

A priori j’ai réussi à configurer git et à initialiser mon repository
remote.
Maintenant j’ai un problème pour déployer avec webistrano/capistrano.

Au départ j’avais un message qui me disait et a priori en cherchant
il m’a semblé voir que en utilisant la version 2.5.2 de capistrano ça
marchait. Mais j’ai un message d’erreur à l’execution avec git
annonçant un code retour 32512 dont je n’ai pas trouvé la signication.

executing locally: “git ls-remote removed_email_address@domain.invalid:notreimmeuble-
git.git master”
*** Could not save revision: Command git ls-remote
removed_email_address@domain.invalid:notreimmeuble-git.git master returned status code
32512

  • executing `deploy:update’
    ** transaction: start
  • executing `deploy:update_code’
    executing locally: “git ls-remote
    removed_email_address@domain.invalid:notreimmeuble-git.git master”
    *** [deploy:update_code] rolling back
  • executing “rm -rf /home/notreimmeuble/www/integration/releases/
    20100106131835; true”
    servers: [“ssh.alwaysdata.com”]
    ** [deploy:update_code] exception while rolling back:
    Capistrano::ConnectionError, connection failed for: ssh.alwaysdata.com
    (NoMethodError: undefined method `configuration_for’ for
    Net::SSH:Module)
    *** Command git ls-remote removed_email_address@domain.invalid:notreimmeuble-git.git
    master returned status code 32512

Pour info voici le capfile généré avec webistrano
load ‘deploy’

================================================================

ROLES

================================================================

role :app, "ssh.alwaysdata.com"

role :db, "ssh.alwaysdata.com", {:primary=>true}

role :web, "ssh.alwaysdata.com"

================================================================

VARIABLES

================================================================

Webistrano defaults

set :webistrano_project, “notre_immeuble”
set :webistrano_stage, “integration”

set :application, “notreimmeuble”

set :deploy_to, “/home/notreimmeuble/www/integration/”

set :deploy_via, :export

set :keep_releases, “2”

set :password, “xxxxxx”

set :rails_env, “integration”

set :remote, “origin”

set :repository, “removed_email_address@domain.invalid:notreimmeuble-git.git”

set :runner, “user to run as with sudo”

set :scm, “git”

set :scm_passphrase, “xxxxx”

set :scm_password, “xxxxxx”

set :scm_username, “xxxxx”

set :use_sudo, false

set :user, “notreimmeuble”

set(:branch) do
Capistrano::CLI.ui.ask "Please enter ‘branch’: "
end

================================================================

TEMPLATE TASKS

================================================================

    # allocate a pty by default as some systems have problems

without
default_run_options[:pty] = true

    # set Net::SSH ssh options through normal variables
    # at the moment only one SSH key is supported as arrays are

not
# parsed correctly by Webistrano::Deployer.type_cast (they end
up as strings)
[:ssh_port, :ssh_keys].each do |ssh_opt|
if exists? ssh_opt
logger.important(“SSH options: setting #{ssh_opt} to: #
{fetch(ssh_opt)}”)
ssh_options[ssh_opt.to_s.gsub(/ssh_/, ‘’).to_sym] = fetch
(ssh_opt)
end
end


#12

En fait non .
Il y avait un problème d’autorisation (The authenticity of host
git.assembla.com (174.129.242.120)’ can’t be established) a moitié
résolu en répondant oui pour continuer mais ensuite il me demande un
mot de passe (removed_email_address@domain.invalid’s password:) et je ne voit pas ce
que c’est et bien sur après 3 essais j’ai l’erreur
Permission denied (publickey,password)
Je le trouve ou le mot de passe, j’ai essayé sans succès le mot de
passe de mon compte chez assembla, ma passprase? la public key c’est
celle que j’ai générée et qui se trouve dans le fichier id_rsa.pub
mais elle ne m’est pas demandé.

Merci d’avance pour votre aide
Nicolas


#13

Le 06/01/10 19:07, Tranquiliste a écrit :

passe de mon compte chez assembla, ma passprase? la public key c’est
celle que j’ai générée et qui se trouve dans le fichier id_rsa.pub
mais elle ne m’est pas demandé.

Merci d’avance pour votre aide
Nicolas

Si tu es sûr la machine distante l’authentification se déroule bien ?
Le problème est-il uniquement lorsque tu fais un clone par capistrano ?

Une solution alternative pour éviter de donner un acces même en lecture
de ton serveur distant est de déployer par copie.

set :deploy_via, :copy

Cela génère en local un tar.gz de ton appli à la révision voulu et
ensuite l’envoi par scp.


#14

Pour info, mon problème est résolu. Cela veniat du fait que j’avais
mal déclaré ma clé privée/publique chez mon hébergeur.

Merci de votre aide et un merci spécial à Julien pour son aide via
mail.
Nicolas


#15

Le 06/01/10 18:49, Tranquiliste a écrit :

A priori j’ai réussi à configurer git et à initialiser mon repository
remote.
Maintenant j’ai un problème pour déployer avec webistrano/capistrano.

Au départ j’avais un message qui me disait et a priori en cherchant
il m’a semblé voir que en utilisant la version 2.5.2 de capistrano ça
marchait. Mais j’ai un message d’erreur à l’execution avec git
annonçant un code retour 32512 dont je n’ai pas trouvé la signication.

Tu arrives à faire un clone du repo git sur ton serveur distant ?