2010-08-18 3 views
1

J'ai un dépôt git avec des centaines de commits. Quand je clone, je reçois beaucoup de sortie comme ceci:La fusion commet dans git

... obtenu ac6d99d2762efe0fcf2b78656e336c25ca8428d5 obtenu ef98d4e93c680384f8174b95e431627b29a56580 obtenu 4d6e1231e0f6265458a8e6ab47a44bfcd357486b mais j'ai 7e3d3a2fc10d0dfe00e87e8eed4a3fc1efa5eaed promenade b43c1e0062b72d3ab416ad209e94e13a6c71815d ...

Cela correspond à chaque engagement , ce qui est ennuyeux. Existe-t-il un moyen de "fusionner" les commits (n'en ont plus besoin) en plus de l'importation (évidente) de HEAD dans un nouveau dépôt? Edit: La commande cmd clone est effectuée avec la méthode http.

+1

Pouvez-vous éditer les questions pour ajouter la ligne de commande que vous avez utilisée pour cloner? –

+0

Est-ce que vous essayez vraiment de supprimer l'historique juste pour rendre la sortie de 'git clone' moins" ennuyante "? – Cascabel

+0

Jefromi: Je stockerais le repo original (complet) sur un espace de sauvegarde. Puisque le code n'est pas développé plus loin, je veux rendre le processus de clone aussi silencieux que possible. –

Répondre

2

ne ont pas besoin les plus

Que voulez-vous dire par là? Pour le meilleur ou pour le pire, la validation HEAD d'un référentiel donné pointe vers son parent, qui pointe vers son parent, jusqu'à la toute première validation.

  • est la sortie de git-clone qui encombrent l'écran? Vous pouvez éviter cela en utilisant le drapeau -q pour le rendre plus silencieux. Vous pouvez également mettre à jour - dans la version 1.7.1, je n'obtiens pas la longue liste de commits à moins que je demande une verbosité supplémentaire (avec -vv).

    La sortie bavarde se produit uniquement dans le protocole HTTP simplifié. L'utilisation des protocoles git ou ssh est plus efficace, et GitHub les supporte tous. En outre, lisez sur le nouveau Smart HTTP Transport.

  • Êtes-vous habitué au VCS centralisé, où une copie de travail a seulement la dernière version? Le meilleur équivalent est probablement un clone peu profond, créé avec git clone --depth=n, où n est combien d'histoire que vous voulez. Il a some limitations que vous devriez lire, mais il vous permet de ne cloner que l'historique récent et d'apporter des modifications qui peuvent être repoussées. D'ailleurs, vous n'économisez pas autant d'espace que vous pourriez l'imaginer avec un clone superficiel - j'ai choisi un projet aléatoire, et les 2,2 Mo d'historique sont passés à 1,2 Mo lorsque j'ai seulement attrapé la dernière validation. Le pack de Git est très efficace dans l'espace.

  • Voulez-vous vraiment jeter toute cette histoire? Une leçon importante dans git est que toute modification apportée à l'historique rend votre référentiel incompatible avec son origine - si vous rebassez pour les écraser tous, ou si vous jetez tout l'historique et recommencez, vous ne pourrez pas communiquer avec le référentiel d'origine.

+0

Merci pour la très bonne explication. :-) –

2

Si vous avez seulement des problèmes avec git clone, vous pouvez essayer d'utiliser le drapeau -q pour le rendre plus silencieux.

Si vous souhaitez fusionner des validations, utilisez git rebase -i. En langage git, la fusion d'un commit en un autre est appelée "squashing". Gardez à l'esprit que cela n'affecte que la branche actuelle. Si les validations existent sur d'autres branches, elles existeront toujours sur d'autres branches.

+0

Si vous voulez vraiment, pour une raison quelconque, détruire * tout * cet historique, le transformer en un seul commit, il serait probablement plus rapide de simplement supprimer le répertoire .git, lancer 'git init', ajouter tout et engagez-le. – Cascabel

+0

En outre, je trouve que git rebase n'est pas pour les faibles de cœur, même sur un simple repo, et je pense qu'il ya quelque chose de mal avec le repo cloné. –

Questions connexes