11
votes

Existe-t-il un moyen de convertir facilement une série de céréales d'un arborescence source en un référentiel GIT?

Je suis nouveau à git et j'ai un nombre modérément élevé de tarballs hebdomadaire d'un projet à long en cours d'exécution. Chaque tarball a en moyenne quelques centaines de fichiers en elle. Je suis à la recherche d'une stratégie git qui me permettra d'ajouter les élargi contenu de chaque tarball à un nouveau dépôt git, à partir de la version 1.001 et en passant par la version 1.650. A partir de ce stade du projet 99,5% des tarball (n) est juste une copie de la version (n-1) - en d'autres termes, un candidat parfait pour git. Le résultat final recherché est d'avoir seulement la branche principale restant à la fin du processus.

Je crois que je sais git assez bien pour le faire « à la main ». Si je comprends bien, il n'y a aucune possibilité d'un conflit de fusion car il n'y aura pas de possibilité de changer le maître avant la prochaine version est ajoutée et engagée. Un script shell est ma première supposition, mais je ne sais pas à quel point bash comme quand branch_n de commande git obtient traitée pendant que bash exécute dans branch_n-1. Aux fins de ce projet, l'environnement hôte est Ubuntu 10.4, les ressources disponibles sont 8 Gig RAM, 500 l'espace disque libre et Gig 4 Processeur à 3.ghz.

Je ne quelqu'un pas besoin d'autre pour résoudre le problème, mais je pourrais utiliser un petit coup de pouce dans la bonne direction quant à la façon d'un expert en git s'approcher. Tous les conseils de quelqu'un qui a « été fait là-bas que » serait apprécié.

Hotei

PS:. Je l'ai regardé de sites suggérés « questions connexes » et n'a rien trouvé pertinent

git

1 commentaires

Les réponses tout soulignent que la ramification ne devrait pas être nécessaire. Cependant, vous souhaitez créer des balises, qui sont des pointeurs fixes à des commits donnés, fréquemment utilisés pour marquer des numéros de version.


5 Réponses :


1
votes

sans avoir été exactement là, tu devrais simplement:

  • endommager une archive partout où vous voulez
  • RSYNC IT avec le répertoire de travail GIT afin de:
    • changer le fichier pertinent
    • Ajoutez les nouveaux fichiers de cette archive au répertoire de travail
    • Supprimez les fichiers du répertoire de travail qui ne sont pas une partie d'attarder de l'archive actuelle
    • git add -a
    • GIT COMTT -M "archive n"
    • Répéter

      L'idée n'est pas de vérifier la branche_n + 1, mais de rester dans la même branche, commettant chaque contenu de goudron un après l'autre dans la même branche du même repo git.
      Si vous avez vraiment deux processus concurrents, vous pourriez alors:

      • git clone le premier repo git
      • branche git -b a_new_branch Pour vous assurer d'isoler ce processus parallèle dans sa propre branche que vous pourrez repousser au premier repo lorsque vous avez terminé.

1 commentaires

J'aime cette idée mais il pourrait être plus facile de combiner les deux premiers ansers. Jusqu'à présent, on dirait: Git init init endaturer (n) dans de nouveaux repos git Ajouter -a Git Engagez -M "Numéro de version FOO" RM -RF * (mais pas .git) répéter



3
votes

Ce que je ferais dans cette situation, comme vous avez des builles qui sont à la fin des versions marquées ':

  1. créer un référentiel git vide
  2. extraire une citacle à ce répertoire écrasant tous les fichiers
  3. Ajouter tous les fichiers git Ajouter.
  4. GIT COMMIT -A -M 'VERSION FOO'
  5. Version actuelle de la balise GIT
  6. Supprimer tous les fichiers
  7. Répétez à partir de l'étape 2 pour chaque Tarball

    Dans votre cas, il n'est pas nécessaire de créer des succursales car toutes vos archives sont des versions distinctes et successives; Chaque itération écrase la précédente.


4 commentaires

Vous manquez une étape - supprimer le contenu précédent avant le dumping dans la tagball.


Vrai, ajouté à la liste. Sinon les suppressions ne seraient pas manipulées.


Je les ai appelés versions mais ce n'est pas exactement ce qu'ils sont. C'est plus comme un "numéro d'instantané". Je fais habituellement environ 1 mise à jour de la version réelle tous les mois ou deux.


J'ai donné un +1 pour mentionner l'étape de la balise GIT. J'ai besoin de la capacité de revenir en arrière et de vérifier une commission antérieure et je crois que la balise me laissera le faire facilement.



4
votes

Concernant ce commentaire:

Je ne suis pas sûr de savoir à quel point Bash aimera-t-il lorsque la branche de la caisse GIT est traitée pendant que Bash est exécutant dans branche_n-1

Êtes-vous préoccupé par deux opérations en cours d'exécution simultanément et de vous rendre dans la voie de chacun? Cela ne devrait pas être un problème si vous exécutez intentionnellement des opérations en parallèle.

En supposant que les tabasses suivent une évolution linéaire, la ramification ne devrait pas venir dans ce tout.

Le processus devrait être assez simple:

  1. git init
  2. endomatique _n _ _
  3. git Ajouter --all.; Git commit (avec des indicateurs appropriés)
  4. git balt -a v1.001 -m "Version 1.001."
  5. rm -rf * (pour gérer les suppressions de l'historique; vous voulez laisser .git intact, bien sûr)
  6. goto 2

5 commentaires

Peut-être que «concerné» n'est pas le mot juste. Je suis "incertain de ce qui va arriver" si git prend $ pwd sortir de sous-bash. Peut-être que Bash ne le fait pas, mais il y a peu d'âge, je me souviens vaguement de lire que Sh crée une copie des commandes exécutées quelque part sous forme de fichier texte, puis modifie ce fichier texte comme le script est exécuté. Si cela ne se produit pas dans $ pwd, ce n'est pas un problème de toute façon.


Retour à votre autre question - non, je n'ai pas l'intention de courir cela parallèlement car je veux que le résultat soit une ligne de fusion ordonnée chronologiquement que je puisse ensuite parcourir quelque chose comme Gitg.


J'aime votre suggestion et incorporé avec celui ci-dessus dans un commentaire.


Testé la solution sur les 3 premières tagles et il semble faire ce que je veux. Scrips Il devrait être relativement simple. Merci à tous ceux qui ont assisté.


Vous pouvez ajouter l'option - date sur commettre avec la date d'origine de l'archive, pour enregistrer également ces informations dans l'historique GIT.



9
votes

Jetez un coup d'œil à $ git_src_dir / forft / Fast -ort-importer / importer-gare.perl


3 commentaires

git.kernel.org/?p=git/git.git;a=blob ;hb=head ;f=contrib/...


Stefan, bonne suggestion !! Perl n'est pas mon langage de script préféré, mais cela valide l'approche générale et souligne certains problèmes potentiels si j'ai des liens symboliques à l'intérieur du Tarball. J'ai besoin d'appliquer les mises à jour dans un ordre spécifique pour obtenir le résultat souhaité, mais ce sera une bonne base de référence. Import-Tars semble également compter sur une importation rapide que je ne connais pas - mais c'est une autre histoire. Merci


@Hotei: importateur-tars.perl est un exemple exemple script; Il sert (entre autres) d'ilustrer comment utiliser une interface d'importation rapide. Vous pouvez écrire votre propre script dans votre langage de script préféré (il existe des exemples importés-zips.py in contrib / import rapide à Python).



0
votes

Jetez un coup d'œil à Git-weave . Vous vous nourrissez d'un répertoire contenant toutes les vitrines élargies avec un fichier contenant la séquence et la connexion entre eux (il gère des branches) avec des messages de validation, il crée un référentiel git de ceci.

Dans votre cas de quelque 600 Tarballs, cela ressemble à une tâche décourageante, vous devrez probablement écrire un script pour faire piger le fichier logement


0 commentaires