2017-10-12 34 views
10

Tôi muốn chạy một cái gì đó trong nền mà về cơ bản hiện một git pull --rebase bất cứ khi nào một số thay đổi xảy ra trong chi nhánh từ xa của tôi. Hầu hết thời gian hoạt động âm thầm trong nền nếu không có xung đột. Trong đó có một cuộc xung đột nó chỉ để lại tôi trong giai đoạn xung đột-giải quyết xung đột và cho đến khi tôi giải quyết mọi thứ nó chờ đợi. Làm thế nào để tôi làm điều này? Có một phần mềm hiện có đã thực hiện điều này không?Git: Làm thế nào để tự động cập nhật chi nhánh địa phương của tôi khi một thay đổi xảy ra trong nhánh theo dõi từ xa?

+2

Bạn sẽ cần phải thêm một cái móc để một kho lưu trữ từ xa hoặc chạy một công việc mỗi x phút tại địa phương. –

+0

Máy chủ git của bạn được lưu trữ trên máy chủ nào? Github, Gitlab, Bitbucket, ..? –

+0

@OrtomalaLokni: Tại sao điều đó lại quan trọng? Tôi hỏi câu hỏi chung cho bất kỳ máy chủ Git từ xa nào ... – pathikrit

Trả lời

5

Nếu bạn không có quyền kiểm soát trên kho lưu trữ từ xa, một giải pháp là sử dụng crontab để chạy định kỳ git fetch hoặc thậm chí có thể là git pull --rebase như bạn đề xuất. Lệnh chính xác để chọn tùy thuộc vào quy trình làm việc của bạn, cá nhân tôi thích sử dụng git fetch vì tôi có thể quyết định thời điểm và cách hợp nhất hoặc rebase.

Để chạy lệnh định kỳ chạy:

crontab -e 

Và thêm một dòng như:

* * * * * git -C PATH_TO_LOCAL_REPO fetch 

hoặc

* * * * * git -C PATH_TO_LOCAL_REPO pull --rebase 

này sẽ chạy lệnh git mỗi phút với bạn Quyền Người dùng.

Nếu bạn muốn áp dụng lệnh git trên một danh sách các kho lưu trữ, bạn có thể có thể thêm dòng:

* * * * * /home/myself/scripts/git-refresh.sh 

nơi git-refresh là một kịch bản được áp dụng trên tất cả các kho của bạn.

Tùy chọn -C cho phép bạn chạy lệnh git mà không thay đổi thư mục. Từ man page:

-C <path>

Run as nếu git được bắt đầu vào thay vì thư mục làm việc hiện hành.

+0

Nhưng tôi phải thêm điều này theo cách thủ công cho mọi repo tôi có trên máy tính để bàn của mình! Tôi có thể có hàng trăm bản Repos trên máy của tôi. Làm cách nào tôi có thể làm theo cách ít thủ công hơn, ví dụ: Tôi chạy một kịch bản như 'git-keep-fresh.sh &' trong một thiết bị đầu cuối trong thư mục gốc của dự án git Tôi đang ở. Thứ hai, làm thế nào điều này xử lý phần thứ hai của câu hỏi của tôi liên quan đến xung đột vv – pathikrit

+0

Tôi đã cập nhật câu trả lời của mình để đưa khía cạnh đa kho lưu trữ vào tài khoản. Đối với giải quyết xung đột, đôi khi nó cần phải hướng dẫn bạn không thể tự động hóa nó, trong mọi trường hợp. –

+0

@pathikrit: lưu ý rằng câu hỏi ban đầu của bạn ngụ ý tìm kiếm giải pháp cho một repo đơn lẻ. Một cronjob sẽ cho phép bạn chạy bất kỳ tập lệnh nào bạn muốn. Bạn có thể có một kịch bản quét các thư mục của bạn cho các kho lưu trữ git có thể (điểm khởi đầu có thể là: 'find $ HOME -name .git'), hoặc bạn có thể chuyển một danh sách các kho lưu trữ (' cat $ HOME/.repositories') . – LeGEC

0

Quá trình này gọi là Đồng bộ hoá một ngã ba

Sync một ngã ba của một kho lưu trữ để giữ cho nó up-to-date với kho thượng nguồn. Thật không may GitHub không có bất kỳ tính năng đồng bộ hóa tự động nào. Tuy nhiên, nó là tầm thường để thêm như một công việc cron trên một máy chủ để bạn không phải làm điều đó bằng tay. Ví dụ:

cd/srv/mirrorrepo; git fetch master upstream; git push nguồn gốc chủ

Plugin sau có thể giúp

https://github.com/trilbymedia/grav-plugin-git-sync

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