Não em um repositório Git , mas no GitHub especificamente - como pesquiso apenas as mensagens de confirmação de um repositório / filial específico?
Não em um repositório Git , mas no GitHub especificamente - como pesquiso apenas as mensagens de confirmação de um repositório / filial específico?
Respostas:
A partir de 2017, é uma funcionalidade incluída no próprio GitHub .
O exemplo de pesquisa usada por eles é repo:torvalds/linux merge:false crypto policy
Imagem GIF de https://github.com/blog/2299-search-commit-messages
Você costumava fazer isso, mas o GitHub removeu esse recurso em algum momento de meados de 2013. Para conseguir isso localmente, você pode:
git log -g --grep=STRING
(Use a -g
bandeira se desejar pesquisar outras ramificações e confirmações pendentes.)
-g, --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from
the most recent one to older ones.
-g
sinalizador para os casos de uso mais comuns. Eu não procurei muito nisso, mas com -g
a pesquisa parece voltar apenas um mês. git log -g --grep=fix
enquanto no develop
ramo de um repo que tem ~ 8000 commits abrangendo dois anos, só vai já em fevereiro 2.
-g
bandeira.
Atualização (05/01/2017):
O GitHub publicou uma atualização que agora permite pesquisar nas mensagens de confirmação de sua interface do usuário. Consulte a publicação no blog para obter mais informações.
Eu tive a mesma pergunta e entrei em contato com alguém GitHub ontem:
Como eles mudaram o mecanismo de pesquisa para o Elasticsearch, não é possível procurar mensagens de confirmação usando a interface do usuário do GitHub. Mas esse recurso está na lista de desejos da equipe.
Infelizmente, não há data de lançamento para essa função no momento.
A resposta curta é que você não pode pesquisar mensagens de confirmação diretamente no site github.com. Por enquanto, recomendamos a git grep
solução local que outras pessoas deste segmento propuseram.
Em um determinado momento, o GitHub ofereceu uma git grep
pesquisa de estilo sobre as mensagens de confirmação para um único repositório. Infelizmente, essa abordagem expôs uma negação de serviço que poderia tornar um servidor de arquivos inacessível. Por esse motivo, removemos a git grep
pesquisa.
As estimativas atuais do verso do envelope colocam o número de confirmações no GitHub em torno da marca de 80 bilhões. Embora os engenheiros do Google riem pelas nossas costas, esse é um número bastante grande de documentos para armazenar no ElasticSearch. Adoraríamos tornar esse conjunto de dados pesquisável, mas não é um projeto trivial.
git diff's
(ou seja, o conteúdo dos commits, não os metadados commit)
Isso foi removido do GitHub. Eu uso:
$git log --all --oneline | grep "search query"
Você também pode filtrar por autor:
$git log --all --oneline --author=rickhanlonii | grep "search query"
Na página de ajuda para pesquisar código , parece que isso ainda não é possível.
Você pode procurar texto no seu repositório, incluindo a capacidade de escolher arquivos ou caminhos para pesquisar, mas não pode especificar que deseja pesquisar em confirmações.
Talvez sugira isso para eles ?
Você pode fazer isso com repositórios que foram rastreados pelo Google (os resultados variam de repositório para repositório).
site "alterar licença": https://github.com/*/*/commits
site "alterar licença": https://github.com/*/*/commits/master
site "alterar licença": https://github.com/twitter/*/commits/master
site "alterar licença": https://github.com/twitter/some_project/commits
Atualize janeiro de 2017 (dois anos depois):
Agora você pode procurar por mensagens de confirmação ! (ainda apenas no ramo mestre)
Fevereiro de 2015: Não tenho certeza se isso seria possível, considerando a atual base de infraestrutura de pesquisa no Elasticsearch (introduzida em janeiro de 2013 ).
Como resposta, "tirando fontes confiáveis e / ou oficiais", aqui está uma entrevista feita com o pessoal do GitHub encarregado de apresentar o Elasticsearch no GitHub (agosto de 2013)
Tim Pease : Temos dois tipos de documentos: um é um arquivo de código-fonte e o outro é um repositório. A maneira como o git funciona é que você tem confirmações e possui uma ramificação para cada confirmação. Os documentos de repositório acompanham a confirmação mais recente para esse repositório específico que foi indexado. Quando um usuário envia uma nova confirmação para o Github, nós retiramos o documento do repositório do elasticsearch. Em seguida, vemos o commit indexado mais recentemente e, em seguida, obtemos uma lista de todos os arquivos que foram modificados, adicionados ou excluídos entre esse push recente e o que indexamos anteriormente. Então podemos ir em frente e apenas atualizar os documentos que foram alterados. Não precisamos indexar novamente toda a árvore do código-fonte toda vez que alguém pressiona.
Andrew Cholakian: Então, vocês apenas indexam, suponho , o ramo principal.
Tim Pease: Correto. É apenas o chefe do ramo principal que você entrará lá e ainda há muitos dados, dois bilhões de documentos, 30 terabytes.
Andrew Cholakian: Isso é incrivelmente grande.
[...]
Tim Pease: Com a indexação do código fonte no push, é um processo de autocorreção.
Temos esse documento de repositório que controla o último commit indexado. Se perdemos, perdemos apenas três confirmações onde esses trabalhos falham, a próxima confirmação que chega, ainda estamos analisando a diferença entre a confirmação anterior que indexamos e a que estamos vendo com esse novo envio.
Você faz umgit diff
e obtém todos os arquivos que foram atualizados, excluídos ou adicionados. Você pode apenas dizer: “Ok, precisamos remover esses arquivos. Precisamos adicionar esses arquivos e tudo mais. ” É auto-reparável e é essa a abordagem que adotamos em praticamente toda a arquitetura.
Isso significa que nem todos os ramos de todo o repo seriam indexados com essa abordagem.
Uma pesquisa de mensagens de confirmação global não está disponível no momento.
E o próprio Tim Pease confirma que as mensagens de confirmação não estão indexadas .
Observe que não é impossível obter a indexação local de um clone local da pesquisa elástica: consulte " Pesquisando um repositório git com ElasticSearch "
Mas para um repo específico, o mais fácil é cloná-lo e fazer um:
git log --all --grep='my search'
(Mais opções em " Como pesquisar em um repositório Git por mensagem de confirmação? ")
Como isso foi removido do GitHub, eu tenho usado gitk
no Linux para fazer isso.
Do terminal, vá para o seu repositório e digite gitk
.
No meio da GUI, há uma caixa de pesquisa. Ele fornece uma boa seleção de filtros:
Escopo - contendo, tocando caminhos, adicionando / removendo string, alterando correspondência de linha
Tipo de correspondência - Exato / IgnCase / Regexp
Campos de pesquisa - Todos os campos / Título / Comentários / Confirmador
Isso funciona bem no Eclipse , até o GitHub adicionar o recurso:
Se você possui uma versão local do repositório, tente este script bruto que escrevi para abrir as páginas do GitHub para todos os commits correspondentes ao seu termo de pesquisa em novas guias no navegador padrão:
#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done
Apenas substitua https://github.com/RepoOwnerUserName/RepoName/
pela URL GitHub atual do seu repositório, salve o script em algum lugar (por exemplo githubsearch.sh
, torne-o executável ( chmod +x githubsearch.sh
) e adicione o seguinte alias ao seu ~/.bashrc
arquivo:
alias githubsearch='/path/to/githubsearch.sh'
Então, de qualquer lugar no seu repositório Git, faça isso no terminal:
githubsearch "what you want to search for"
e quaisquer confirmações que correspondam ao seu termo de pesquisa (sem distinção entre maiúsculas e minúsculas) terão as páginas correspondentes do GitHub abertas no navegador. (Esteja ciente de que, se o seu termo de pesquisa aparecer em centenas de confirmações, isso poderá travar o navegador e consumir a CPU do seu PC por um tempo.)