web-dev-qa-db-fra.com

Comment cloner un projet de démarrage/démarrage sans l'historique complet?

Notez que l'utilisation du paramètre --depth=1 vous empêche de transférer le projet dans un nouveau référentiel.

pour plus de détails, voir: "Rejeté à distance" (mise à jour peu profonde non autorisée) après avoir modifié l'URL distante de Git

46
itamar

Tu peux faire un 

git clone <git_url>

supprimez le référentiel .git de votre dossier. Ce qui effacera tout votre historique. 

Le vous pouvez faire un

git init 

ce qui créera un tout nouveau projet git pour vous.

Cela peut ne pas être le meilleur moyen. Mais ça va marcher. J'espère que ça aide.

42
Ajay

Tant que vous considérez que la perte totale de l'historique n'est pas un problème, l'approche proposée par Ajay est parfaitement valable. Mais si vous souhaitez conserver l'historique de votre clone peu profond, j'ai une suggestion différente.


Un clone peu profond prétend avoir l'historique complet en utilisant un soi-disant point de greffe pour simuler le parent du "premier" commit. Si nous supposons que tout l'historique est disponible, nous pourrions reformuler la question: Comment puis-je jeter l'historique avant une révision spécifique?

Cela signifie que nous pouvons utiliser une combinaison de point de greffe et git filter-branch (comme suggéré dans la question liée). Cependant, vous devez noter que cela réécrira votre historique complet, rendant le nouvel historique incompatible avec la télécommande que nous avons initialement clonée. Pour cette raison, nous devrions supprimer l'ancienne télécommande de notre référentiel.

git remote remove <old-remote-name>

Nous pouvons maintenant commencer notre réécriture. Supposons que nous voulions que master actuel valide la nouvelle racine du référentiel.

git rev-parse --verify master >> .git/info/grafts
git filter-branch -- --all

Ceci réécrira l'historique complet de notre référentiel, avec le commit principal actuel comme nouvelle racine. Vous pouvez finaliser la réécriture en supprimant les références "de sauvegarde" dans refs/original. De plus, vous pouvez maintenant supprimer le fichier .git/shallow.

Une fois que vous avez terminé, vous devriez être en mesure d’afficher l’historique maintenant ungrafted dans votre nouvelle télécommande.

17
Sascha Wolf

Essayez quelque chose comme ça:

mkdir -p /tmp/git-copy
cd /tmp/git-copy

# create another copy of your repository
git clone file:///path/to/cloned/repo

cd repo
git rebase -i (first-commit)

# in vim:
# :2,$s/^pick/squash
# :w

# Now wait, it will take a while...

git Push --mirror [email protected]:username/new-repo.git

Je l'ai essayé tout à l'heure sur ce référentiel . Semble fonctionner - aucune histoire et tous les sous-modules sont intacts.

0