2015-03-18 11 views
9

Mi sto imbattendo in questo problema su un'app per rails su cui sto lavorando. Stavo lavorando su un ramo di funzionalità e volevo eseguire il rebase dal master più recente. Ho eseguito i seguenti comandi:Gemfile.lock ha sempre modifiche non modificate per il commit

$ git checkout master 
$ git pull --rebase 

Se cerco di cassa di nuovo al mio ramo di caratteristica ricevo il seguente errore:

Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: Gemfile.lock 

Ho provato i seguenti comandi per risolvere il Gemfile.lock di nuovo a aster con nessuno di loro avere successo:

$ git checkout -- Gemfile.lock 
$ git stash 
$ git reset HEAD --hard 

Ogni volta che corro un nuovo comando git torno al Gemfile.lock avere modifiche non messo in scena per commettere.

Qui ci sono le seguenti versioni di librerie con cui sto lavorando:

$ git --version => 2.3.3 
$ bundler --version => 1.7.9 
+0

Quali sono le modifiche? Qualcosa di significativo? –

+0

Per favore aggiorna Bundler eseguendo nuovamente 'gem install bundler'. Bundler 1.7.9 ha alcuni bug che possono causare modifiche inaspettate a 'Gemfile.lock' in determinate circostanze. Questi sono stati corretti nelle versioni più recenti. Per quanto riguarda ciò che sta causando questo quando si eseguono solo comandi 'git', penso che la risposta di Matt Brictson sia la migliore. –

risposta

0

ci sono volte che eseguendo il comando a rotaie o altro comando bundle Exec in silenzio aggiornare il Gemfile.lock. Immagino che lo farai a metà tra i tuoi comandi git. O hai qualcosa di strano installato che lo fa in modo invisibile.

(Potrebbe farlo in modo invisibile? Non so. Penso che rvm fa tutti i tipi di cose strane e non la usa.).

In ogni caso, il fatto che ciò stia accadendo è probabilmente la prova che qualcos'altro sta succedendo non è quello che vuoi - sei sicuro che Gemfile e Gemfile.lock che stai cercando di commettere insieme siano effettivamente compatibili? Normalmente ogni volta che un file Gemfile cambia, è consigliabile eseguire l'installazione di bundle per ottenere un nuovo Gemfile.lock. Se stai provando a commettere un Gemfile.lock che in realtà non è compatibile con il Gemfile ... Non sono sicuro del perché vorresti farlo comunque, normalmente voglio che Gemfile e Gemfile.lock in ogni commit siano compatibile.

Per avere un indizio sul motivo per cui qualcosa (misterioso) potrebbe cambiare il tuo Gemfile.lock, fai un git diff su Gemfile.lock per vedere come è cambiato?

27

Ci deve essere qualche processo in esecuzione in background o qualche effetto collaterale dell'esecuzione dei comandi git nella shell che sta modificando il Gemfile.lock.

Non ho familiarità con la magia di rvm (anche se sembra plausibile); Ecco alcune altre cose da verificare:

  • Nelle versioni recenti di Rails è in esecuzione un processo in background "spring". Prova a eseguire spring stop (o bin/spring stop o bundle exec spring stop) per terminare con garbo quel processo.
  • Allo stesso modo se avete altri processi relativi a Rails come server di rails, guard, zeus, sidekiq, ecc. In esecuzione, provate a chiuderli.
  • Potrebbe essere in esecuzione un hook di pre-commit git. Controllare la directory .git/hooks.
  • git potrebbe essere un alias nella shell per un altro comando. Eseguire alias per visualizzare un elenco di alias di shell.
  • Il prompt della shell potrebbe eseguire codice per eseguire operazioni come mostrare lo stato git corrente e il nome del ramo nel prompt. Questo codice verrà eseguito dopo ogni comando della shell per ridisegnare il prompt e potrebbe avere effetti collaterali. Controlla il tuo .bashrc o .bash_profile.
+9

Grazie, per me il problema era con la primavera. Dopo un "arresto primaverile" sono stato in grado di eseguire correttamente il checkout di Git - Gemfile.lock' – Brian

+2

Sì. Abbiamo avuto lo stesso problema su un nuovo progetto Rails 4.2 ed era Spring. Così utile! – jwadsack

+0

Dopo l'esecuzione di 'spring stop' dovrei eseguire' spring start' dopo? –

Problemi correlati