2015-03-18 15 views
9

Tôi đang gặp sự cố này trên ứng dụng đường ray mà tôi đang thực hiện. Tôi đã làm việc trên một chi nhánh tính năng và muốn rebase từ bậc thầy gần đây nhất. Tôi chạy các lệnh sau:Gemfile.lock luôn có các thay đổi không được dàn dựng cho cam kết

$ git checkout master 
$ git pull --rebase 

Nếu tôi cố gắng để kiểm tra lại chi nhánh tính năng của tôi, tôi nhận được lỗi sau:

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 

Tôi đã thử các lệnh sau đây để giải quyết Gemfile.lock trở lại aster không ai trong số họ thành công:

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

Mỗi khi tôi chạy lệnh git mới, tôi quay lại Gemfile.lock có thay đổi không được tổ chức để cam kết.

Sau đây là các phiên bản sau của thư viện tôi đang làm việc với:

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

Các thay đổi là gì? Có gì đáng kể không? –

+0

Vui lòng nâng cấp Bundler bằng cách chạy lại 'gem install bundler'. Bundler 1.7.9 có một số lỗi có thể gây ra những thay đổi không mong muốn đối với 'Gemfile.lock' trong một số trường hợp nhất định. Chúng đã được sửa trong các phiên bản gần đây. Đối với những gì gây ra điều này khi chỉ chạy lệnh 'git', tôi nghĩ câu trả lời của Matt Brictson là tốt nhất. –

Trả lời

0

Có lần so với chạy một đường ray lệnh hoặc lệnh exec bó khác sẽ âm thầm cập nhật Gemfile.lock của bạn. Tôi đoán bạn đang làm điều đó đôi khi ở giữa các lệnh git của bạn. Hoặc bạn có một cái gì đó lạ cài đặt mà làm điều đó vô hình.

(Rvm có thể làm điều này một cách vô hình không? Tôi không biết. Tôi nghĩ rvm thực hiện đủ mọi thứ kỳ lạ và không sử dụng nó.).

Ở mức độ nào đó, thực tế là điều này đang xảy ra có lẽ là bằng chứng về điều gì đó đang xảy ra mà không phải là điều bạn muốn - bạn có chắc chắn Gemfile và Gemfile.lock bạn đang cố gắng cam kết với nhau thực sự tương thích không? Thông thường bất cứ lúc nào một Gemfile thay đổi chút nào, bạn nên chạy gói cài đặt để có được một Gemfile.lock mới. Nếu bạn đang cố gắng cam kết một Gemfile.lock mà thực sự không tương thích với Gemfile ... Tôi không chắc chắn lý do tại sao bạn muốn làm điều đó anyway, bình thường tôi muốn Gemfile và Gemfile.lock trong bất kỳ cam kết nào là tương thích.

Để nhận được manh mối về lý do tại sao một điều gì đó (bí ẩn) có thể thay đổi Gemfile.lock của bạn, hãy thực hiện một thay đổi khác trên Gemfile.lock để xem nó đã thay đổi như thế nào?

27

Phải có một số quy trình chạy trong nền hoặc một số tác dụng phụ của việc thực hiện lệnh git trong trình bao đang sửa đổi Gemfile.lock.

Tôi không quen thuộc với phép thuật của rvm (mặc dù điều đó nghe có vẻ hợp lý); dưới đây là một số điều khác cần kiểm tra:

  • Trong các phiên bản gần đây của Rails có quy trình nền "mùa xuân" chạy. Hãy thử chạy spring stop (hoặc bin/spring stop hoặc bundle exec spring stop) để chấm dứt hiệu quả quy trình đó.
  • Tương tự như vậy nếu bạn có bất kỳ quy trình nào khác có liên quan đến Rails như máy chủ đường ray, bảo vệ, zeus, sidekiq, v.v ..., hãy thử tắt chúng.
  • Bạn có thể đang chạy lệnh git pre-commit hook. Kiểm tra thư mục .git/hooks.
  • git có thể là bí danh trong trình bao của bạn cho một lệnh khác. Chạy alias để xem danh sách bí danh vỏ.
  • Dấu nhắc trình bao của bạn có thể đang thực thi mã để thực hiện những việc như hiển thị trạng thái git hiện tại và tên chi nhánh trong lời nhắc. Mã này sẽ được thực hiện sau mỗi lệnh shell để vẽ lại lời nhắc và có thể có các tác dụng phụ. Kiểm tra .bashrc hoặc .bash_profile của bạn.
+9

Cảm ơn, đối với tôi vấn đề là với mùa xuân. Sau một 'spring stop' tôi đã có thể thành công' git checkout - Gemfile.lock' – Brian

+2

Yeah. Chúng tôi đã có cùng một vấn đề về một dự án Rails 4.2 mới và đó là Spring. Thật hữu ích! – jwadsack

+0

Sau khi chạy 'spring stop', tôi có nên chạy' spring start' sau đó không? –

Các vấn đề liên quan