2011-09-27 24 views
7

Tôi đã tìm kiếm xung quanh và không tìm thấy câu trả lời cho câu hỏi này.Git - so sánh địa phương và từ xa mà không cần tìm nạp trước?

Tôi có một ứng dụng đang chạy trên Heroku. Từ máy cục bộ của tôi, tôi thường triển khai và thực hiện:

git add . 
git commit -m "whatever change, I know I can add and commit at the same time..." 
git push <the-heroku-repo> 

Sau đó, nó đi lên và nhánh chính trong ứng dụng Heroku được cập nhật. Càng xa càng tốt.

Hiện tại. Tôi muốn có một cỗ máy khác sẽ tự động tạo ra một cái kéo từ repo của Heroku và tự cập nhật.

Vì vậy, tôi làm điều đó với:

git clone <the-heroku-repo> 

Đó được tôi ứng dụng và tôi có thể thấy cấu hình git với điều này:

core.repositoryformatversion=0 
core.filemode=true 
core.bare=false 
core.logallrefupdates=true 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
[email protected]:theapp.git 
branch.master.remote=origin 
branch.master.merge=refs/heads/master 

Để cập nhật repo mới này tôi có thể làm chỉ là một pull :

git pull origin 

Hoặc tôi có thể lấy và hợp nhất:

git fetch origin 
git merge origin/master 

CÂU HỎI TÔI

Giữa trên lấy và hợp nhất tôi có thể kiểm tra những thay đổi là gì bằng cách thực hiện:

git log -p master..origin/master 

Có cách nào để tìm sự khác nhau giữa các chi nhánh tổng thể địa phương và mới nhất phiên bản trong repo Heroku từ xa mà không cần lấy trước? Chỉ cần so sánh địa phương và từ xa và xem các thay đổi. Tôi không thể tìm được cách thích hợp.

Cảm ơn.

+0

mà không tìm nạp, bạn sẽ không biết bất cứ điều gì cập nhật từ repo từ xa –

+0

Tôi quan tâm đến vấn đề là làm 'git fetch origin' trước' git log'? –

+0

Có thể vấn đề là tôi, dựa trên định nghĩa của lệnh tìm nạp: "git fetch tải xuống các nhánh và dữ liệu mới từ một kho lưu trữ từ xa". Hãy tưởng tượng rằng dựa trên một số đầu ra của so sánh tôi sẽ quyết định rằng tôi không muốn lấy và hợp nhất những thay đổi đó. Tại sao tôi sử dụng băng thông và điều chỉnh kho lưu trữ với một thứ không cần thiết. Một lần nữa, có thể vấn đề là tôi. Chỉ cần cố gắng lưu một cuộc gọi hoặc tài nguyên nếu có thể bằng cách biết trước khi thực hiện các thay đổi hiện tại. – Pod

Trả lời

14

Mặc dù bạn có thể nhận được một số thông tin tóm tắt về các ngành trong kho origin sử dụng:

git remote show origin 

... bạn cần phải lấy những cành từ origin vào kho lưu trữ của bạn bằng cách nào đó để so sánh chúng. Đây là những gì git fetch thực hiện. Khi bạn chạy git fetch origin, theo mặc định, nó sẽ chỉ cập nhật "chi nhánh theo dõi từ xa", chẳng hạn như origin/master. Các cửa hàng này chỉ lưu trữ nơi chi nhánh tương ứng ở trong origin lần cuối cùng bạn tìm nạp. Tất cả các chi nhánh địa phương mà bạn đang làm việc đều không bị ảnh hưởng bởi git fetch. Vì vậy, nó an toàn để làm:

git fetch origin 
git log -p master..origin/master 

... và sau đó nếu bạn hài lòng với điều đó, bạn có thể hợp nhất hoặc rebase lên origin/master.


Tôi khuyến khích bạn không nên lo lắng về tài nguyên (dung lượng đĩa hoặc băng thông) tham gia vào lệnh git fetch origin. git chỉ gửi các đối tượng cần thiết để hoàn thành các nhánh theo dõi từ xa đang được cập nhật và trừ khi bạn có các tệp lớn bất thường được lưu trữ với mã nguồn của bạn, điều này không tạo ra nhiều khác biệt.Ngoài ra, nó thường hữu ích để có lịch sử đầy đủ của các chi nhánh từ kho lưu trữ khác có sẵn ngay cả khi bạn không có kế hoạch sử dụng chúng, ví dụ để bạn có thể kiểm tra lịch sử phát triển đó.

+0

Cảm ơn bạn đã nhận xét và trả lời nhanh chóng. Vì vậy, nó đã được tôi :-) – Pod

+2

Tôi đã sử dụng PULL đã được phục vụ tốt cho tôi, nhưng sau đó tôi đọc một tỷ lần để thích lấy/hợp nhất trên nó vì vậy tôi bắt đầu sử dụng nó. Nó hoạt động tốt, nhưng nó đã cho tôi một thời gian để nhận ra rằng GIT lấy tất cả các chi nhánh từ xa vào một "không gian tạm thời" và bạn là người đầu tiên nói tên của nó "từ xa theo dõi chi nhánh". Tôi thực sự coudn't understad nơi dữ liệu được lấy đi đã được đi bởi vì nó không phải cho đến khi hợp nhất rằng nó là bên trong kho lưu trữ của bạn. Cảm ơn – luigi7up

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