Pergunta

Gostaria de criar um script, de preferência em rake, das seguintes ações em um único comando:

  1. Obtenha a versão do meu repositório git local.
  2. Git extraia o código mais recente.
  3. Git difere da versão que extraí na etapa 1 para o que está agora em meu repositório local.

Em outras palavras, quero obter o código mais recente do repositório central e gerar imediatamente uma comparação do que mudou desde a última vez que extraí.

Foi útil?

Solução

Você poderia fazer isso simplesmente com refspecs.

git pull origin
git diff @{1}..

Isso lhe dará uma comparação do branch atual como ele existia antes e depois do pull.Observe que se o pull não atualizar realmente o branch atual, o diff fornecerá resultados errados.Outra opção é registrar explicitamente a versão atual:

current=`git rev-parse HEAD`
git pull origin
git diff $current..

Eu pessoalmente uso um alias que simplesmente me mostra um log, na ordem inversa (ou seja,do mais antigo para o mais novo), sem mesclagens, de todos os commits desde meu último pull.Eu executo isso toda vez que meu pull atualiza o branch:

git config --global alias.lcrev 'log --reverse --no-merges --stat @{1}..

Outras dicas

de Greg maneira deve funcionar (não eu, outro Greg: P).Em relação ao seu comentário, origin é uma variável de configuração definida pelo Git quando você clona o repositório central para sua máquina local.Essencialmente, um repositório Git lembra de onde veio.Você pode, no entanto, definir essas variáveis ​​manualmente se precisar usando git-config.

git config remote.origin.url <url>

onde url é o caminho remoto para seu repositório central.

Aqui está um exemplo de arquivo em lote que deve funcionar (não testei).

@ECHO off

:: Retrieve the changes, but don't merge them.
git fetch

:: Look at the new changes
git diff ...origin

:: Ask if you want to merge the new changes into HEAD
set /p PULL=Do you wish to pull the changes? (Y/N)
IF /I %PULL%==Y git pull

Isso é muito semelhante a uma pergunta que fiz sobre como obter alterações em um branch no git.Observe que o comportamento de git diff vs.git log é inconsistentemente diferente ao usar dois pontos vs.três pontos.Mas, para sua aplicação você pode usar:

git fetch
git diff ...origin

Depois disso, um git pull irá mesclar as alterações em seu HEAD.

Se você colocar isso em seu perfil bash, poderá executar o grin (git remote incoming) e o grout (git remote outgoing) para ver diferenças de commits que são recebidos e enviados para o origin master.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
function gd2 { 
 echo branch \($1\) has these commits and \($2\) does not 
 git log $2..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}
function grin {
 git fetch origin master
 gd2 FETCH_HEAD $(parse_git_branch)
}
function grout {
 git fetch origin master
 gd2 $(parse_git_branch) FETCH_HEAD
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top