Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.39.1 → 2.43.0 no changes
- 2.39.0 12/12/22
- 2.28.1 → 2.38.5 no changes
- 2.28.0 07/27/20
DESCRIÇÃO
Este programa despeja as revisões informadas em um formato adequado para ser canalizado para o git fast-import.
Você pode usá-lo como uma reposição legível do pacote (consulte git-bundle[1]) ou como um formato que pode ser editado antes que possa ser enviado ao git fast import para fazer a reescrita no histórico (uma habilidade dependente das ferramentas como git filter-repo).
OPÇÕES
- --progress = <n>
-
Insira instruções de progresso em todos os objetos
<n>
a serem exibidos por git fast-import durante a importação. - --signed-tags=(verbatim|warn|warn-strip|strip|abort)
-
Determine como lidar com tags assinadas. Como qualquer transformação após a exportação pode alterar os nomes das tags (o que também pode acontecer ao excluir as revisões) e as assinaturas não coincidentes.
Ao pedir para abortar abort (que é o padrão), este programa será terminado ao encontrar uma tag assinada. Com
strip
, as tags serão silenciosamente perderão a assinatura, comwarn strip
elas também perderão a assinatura, porém um aviso será exibido, comverbatim
, elas serão exportadas silenciosamente e comwarn
, elas serão exportadas , porém você será avisado. - --tag-of-filtered-object=(abort|drop|rewrite)
-
Determina como manipular as tags cujo objeto marcado seja filtrado. Como as revisões e os arquivos a serem exportados podem ser limitados pelo caminho, os objetos marcados podem ser filtrados por completo.
Ao pedir para abortar abort (que é o predefinido), este programa será terminado ao encontrar tal tag. Com drop estas opções serão omitidas da saída. Com rewrite, caso o objeto marcado seja um commit, a tag será reescrita para marcar a tag de um commit anterior (através da reescrita da origem; consulte git-rev-list[1])
- -M
- -C
-
Detecta a ação de copiar e mover como descrito na página do manual git-diff[1], utilize-o para gerar comandos de copiar e renomear na saída.
Observe que as versões anteriores deste comando não reclamavam e produziam resultados incorretos caso essas opções fossem utilizadas.
- --export-marks=<arquivo>
-
Despeja a tabela de marcações internas em <arquivo> quando concluída. As marcações são escritas uma por linha como
:markid SHA-1
. Somente as marcações para as revisões são despejadas; as marcações das bolhas são ignoradas. Os processos internos podem usar esse arquivo para validar as importações depois de concluídas ou para salvar a tabela de marcações em execuções incrementais. Como o <arquivo> só é aberto e truncado na conclusão, o mesmo caminho também pode ser passado com segurança para--import-marks
. O arquivo não será gravado caso nenhum novo objeto tenha sido marcado/exportado. - --import-marks=<arquivo>
-
Antes de processar qualquer entrada, carregue as marcações especificadas no <arquivo>. O arquivo de entrada deve existir, ser legível e usar o mesmo formato produzido por
--export-marks
. - --mark-tags
-
Além de rotular as bolhas e fazer os commits com os IDs das marcações, e também rotulando as tags. É útil em conjunto com a opção
--export-marks
e--import-marks
, também é útil (e necessário) para a exportação das tags aninhadas. Não prejudica os outros casos e seria a predefinição, porém muitos frontends de importação rápida (fast-import) não estão preparados para aceitar as tags com identificadores de marcação.Quaisquer commits (ou tags) que já foram marcadas não serão exportadas novamente. Caso a estrutura utilize um arquivo --import-marks semelhante, isto permitirá a exportação bidirecional e incremental do repositório, mantendo as marcas iguais durante as execuções.
- --fake-missing-tagger
-
Alguns repositórios antigos têm tags sem um etiquetador. O protocolo de importação rápida era bastante rigoroso quanto isso. Então, falsifique um etiquetador para poder importar rapidamente a saída.
- --use-done-feature
-
Inicie o fluxo com uma sub-rotina feature done e finalize-o com um comando done.
- --no-data
-
Ignore a saída dos objetos bolha e, em vez disso, consulte as bolhas por meio do hash SHA-1 original. Isso é útil durante a reescrita da estrutura dos diretórios ou do histórico de um repositório sem tocar no conteúdo individual dos arquivos. Observe que o fluxo resultante pode ser utilizado apenas por um repositório que já contenha os objetos necessários.
- --full-tree
-
Essa opção fará com que a exportação rápida emita uma diretiva "deleteall" (apague todos) para cada commit seguida por uma lista completa de todos os arquivos no commit (em vez de apenas listar os arquivos diferentes do primeiro commit).
- --anonymize
-
Torne os conteúdos do repositório, anônimo, mantendo a forma do histórico e da árvore armazenada. Veja a seção
ANONIMIZANDO
abaixo. - --anonymize-map=<a-partir-de>[:<para>]
-
Converta o token
<a-partir-de>
para<para>
na saída anônima. Caso<para>
seja omitido, mapeie<a-partir-de>
para si mesmo (ou seja, não anonimamente). Consulte a seção 'ANONIMIZANDO` abaixo. - --reference-excluded-parents
-
É predefinido que ao executar um comando como
git fast-export master~5..master
não incluirá o commit master~5 e fará com que o master~4 não tenha mais o master~5 como parente (embora ambos o antigo master~4 e o novo master~4 tenham todos os mesmos arquivos). Utilize a opção--reference-exclusive-parents
para que o fluxo se refira aos commits no intervalo excluído do histórico pelo sha1sum. Observe que o fluxo resultante pode ser utilizado apenas por um repositório que já contenha os parentes dos commits necessários. - --show-original-ids
-
Inclua uma diretiva extra para os commits que forem gerados e as bolhas,
original-oid <SHA1SUM>
. Embora estas diretivas provavelmente sejam ignoradas pelos importadores, como o comandogit-fast-import
, pode ser útil para os filtros intermediários (para reescrever mensagens do commit que se referem aos commits mais antigos ou para remover as bolhas através de uma ID por exemplo). - --reencode=(yes|no|abort)
-
Especifique como manipular o cabeçalho
encoding
nos objetos commit. Ao pedir para abortar abort (que é a predefinição), este programa será terminado ao encontrar tal objeto que foi feito o commit. Com yes, a mensagem do commit será re-codificada para UTF-8. Com no, a codificação original será preservada. - --refspec
-
Aplique o
refspec
especificado a cada "ref" exportado. Vários deles podem ser especificados. - [<git-rev-list-args>…]
-
Uma lista de argumentos aceitáveis para o git rev-parse e git rev-list, que especifica os objetos e referências para serem exportadas. Por exemplo,
master~10..master
faz com que a referência principal atual seja exportada junto com todos os objetos adicionados desde o seu décimo commit ancestral e (a menos que a opção--reference-exclusive-parents
esteja especificada) todos os arquivos comuns a master~9 e master~10.
EXEMPLOS
$ git fast-export --all | (cd /empty/repository && git fast-import)
Isso exportará o repositório inteiro e importará para o repositório vazio existente. Exceto para re-codificar os commits que não estejam como UTF-8, seria um cópia um para um.
$ git fast-export master~5..master | sed "s|refs/heads/master|refs/heads/other|" | git fast-import
Isso cria um novo ramo chamado other de master~5..master (ou seja, caso master tenha um histórico linear, serão necessários então os últimos 5 commits).
Observe que isso pressupõe que nenhuma das bolhas e as mensagens dos commits
referenciadas por esse intervalo de revisão, contenha a sequência
refs/heads/master
.
ANONIMIZANDO
Caso a opção --anonymize
seja utilizada, o git tentará remover todas as
informações de identificação do repositório, mantendo ainda o suficiente da
árvore original e dos padrões do histórico para reproduzir alguns bugs. O
objetivo é que um bug do git encontrado em um repositório privado persista
no repositório anonimizado e este último pode ser compartilhado com os
desenvolvedores do git para ajudar na resolução do problema.
Com esta opção, o git substituirá todos os refnames
, os caminhos, o
conteúdo da bolha, o commit, a tag das mensagens, os nomes e os endereços de
e-mail que forem gerados através de dados anônimos. As duas instâncias da
mesma sequência serão substituídas de forma equivalente (dois commits com o
mesmo autor irão gerar o mesmo autor anônimo, porém não terão nenhuma
semelhança com a sequência do autor original por exemplo). O relacionamento
entre os commits, as ramificações e as tags será mantido, bem como o
registro de data e hora dos commits (menos as mensagens dos commits e os
refnames
que não tenham nenhuma semelhança com os originais). A composição
relativa da árvore é mantida (caso tenha uma árvore raiz com 10 arquivos e 3
árvores, assim também será gerado por exemplo), porém os seus nomes e o
conteúdo dos arquivos serão substituídos.
Caso acredite que tenha encontrado um bug no git, pode começar exportando um fluxo anonimizado de todo o repositório:
$ git fast-export --anonymize --all >anon-stream
Em seguida, confirme se o bug persiste em um repositório criado a partir desse fluxo (muitos erros não, pois eles realmente dependem do conteúdo exato do repositório):
$ git init anon-repo $ cd anon-repo $ git fast-import <../anon-stream $ ... teste o seu bug ...
Caso o repositório anonimizado exiba o erro, pode valer a pena compartilhar
o anon-stream
junto com um relatório de erro tradicional. Observe que o
fluxo anonimizado é muito bem compactado, portanto a sua compactação gzip é
altamente recomendável. Caso deseje examinar o fluxo para ver se não contém
dados particulares, é possível examiná-lo diretamente antes de
enviar. Também é possível tentar:
$ perl -pe 's/\d+/X/g' <anon-stream | sort -u | less
que exiba todas as linhas exclusivas (com números convertidos em "X", para recolher o "Usuário 0", "Usuário 1" etc. em "Usuário X"). Isso produz uma saída muito menor e geralmente é de rápida confirmação já que não há dados privados no fluxo.
A reprodução de alguns bugs pode exigir a referência para alguns commits em
particular ou caminhos específicos, o que se torna desafiador depois que os
refnames e os caminhos sejam anonimizados. É possível solicitar que um token
em específico seja deixado como está ou seja mapeado para um novo
valor. Como por exemplo, caso tenha um bug que seja reproduzido com o
comando git rev-list sensitive -- secret.c
, é possível executar:
$ git fast-export --anonymize --all \ --anonymize-map=sensitive:foo \ --anonymize-map=secret.c:bar.c \ >stream
Depois de importar o fluxo, é possível então executar o commando git
rev-list foo -- bar.c
no repositório anonimizado.
Observe que os caminhos e os nomes são divididos em tokens nos limites do
corte. O comando acima iria anonimizar subdir/secret.c
para algo como
path123/bar.c
; seria possível então procurar por bar.c
no repositório
anonimizado para determinar o caminho final.
Para tornar mais simples a referência ao pathname (nome do caminho), é
possível mapear cada componente do caminho; então, caso também anonimize o
subdir
para publicdir
, então o nome final do caminho seria
publicdir/bar.c
.
LIMITAÇÕES
Como git fast-import não pode marcar as árvores, você não poderá exportar o repositório linux.git completamente pois ele contém uma marca que faz referência a uma árvore em vez de um commit.
GIT
Parte do conjunto git[1]