Partager un ensemble de fichiers dans un git repo dans leur propre dépôt, en préservant l'historique pertinent [dupliquer]
possibilité de duplication:
comment diviser un dépôt git tout en conservant des sous-répertoires?
À un moment, j'ai ajouté mon code à un repo git, et se sont engagés à beaucoup depuis, tandis que l'autre développeur s'est engagé pour les autres fichiers existants dans le repo. maintenant je veux diviser mon code en son propre repo, mais préserver tout l'historique des modifications pour mes fichiers.
en lisant ce que les autres ont fait pour séparer le code, je regardais filter-branch
et en faisant --index-filter
ou --tree-filter
avec des commandes rm
pour les fichiers dont je ne me soucie pas. Je ne veux pas utiliser --subdirectory-filter
car il n'est pas approprié que le sous-DIR contenant mon code soit le topdir (nous avons aussi partagé un sous-DIR). Pour compliquer les choses, certains des fichiers du dépôt original ont déplacé un peu au fil du temps, et il ya des fichiers qui ont été créés puis supprimés. Cela rend la conception d'une liste rm un peu... difficile.
je cherche un moyen de tout filtrer /sauf/ une liste de fichiers/répertoires. Quelqu'un sait d'une façon de le faire?
1 réponses
juste pour fermer la boucle sur ce ainsi il apparaît comme répondu.
en utilisant index-filter
ou tree-filter
et en appliquant la logique inverse comme git ls-tree
piped into (multiple) grep -v
's piped into xargs
for git rm
vous pouvez en effet supprimer tout ce qui ne correspond pas à un ensemble étroit de noms de fichiers/répertoires. Voici la commande que j'ai utilisée pour séparer mes fichiers particuliers:
git filter-branch \
--prune-empty \
--index-filter '
git ls-tree -z -r --name-only --full-tree $GIT_COMMIT \
| grep -z -v "^src/pyfedpkg$" \
| grep -z -v "^src/fedpkg" \
| grep -z -v "^git-changelog" \
| xargs -0 -r git rm --cached -r
' \
-- \
--all