Đầu tiên, bức tranh lớn: Tôi đang cố gắng viết một kịch bản nhận sau git cho một máy chủ Redmine/Gitolite mà tôi đang chạy. Theo các khuyến nghị khác nhau, tôi đang tạo một kho lưu trữ trống và cục bộ cho Redmine để đọc, và tôi đang thiết lập một kịch bản sau khi nhận trên Gitolite để đẩy các thay đổi vào repo Redmine.Git Fetch không hoạt động trên repo trần, nhưng git pull hoạt động trên repo bình thường
Tuy nhiên, tôi rất noobish với Git, vì vậy tôi thậm chí không thể làm một công việc đơn giản ở đây> _ <. Tôi nghĩ nếu tôi tìm ra điều này, tôi sẽ có thể viết kịch bản trên. Sau khi thiết lập repo thử nghiệm của tôi, tôi đã tạo ra hai repos như một thử nghiệm.
(The "Trung Repo" là một kho lưu trữ Gitolite tại git @ localhost: thử nghiệm)
cd /tmp
mkdir /tmp/test
$ git clone [email protected]:testing
$ git clone [email protected]:testing testing2
$ git clone [email protected]:testing --bare
Bây giờ khi tôi chạy ls:
$ ls
testing testing2 testing.git
Bây giờ, tôi thay đổi các tập tin thử nghiệm bên trong test2, và sau đó đẩy các thay đổi vào repo trung tâm.
$ cd testing2
$ echo 'testline' >> test && git commit --allow-empty-message -a -m '' && git push
Như dự kiến, nếu tôi chạy "git pull" trên thư mục "test", mọi thứ hoạt động như mong đợi.
$ cd testing
$ git pull
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From localhost:testing
3242dba..a1ca5ba master -> origin/master
Updating 3242dba..a1ca5ba
Fast-forward
test | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$ diff ./test ../testing2/test
$
Như được hiển thị với thư mục "diff" khác, thư mục "test" và "testing2" hoạt động chính xác như mong đợi. Lệnh "git pull" đồng bộ hóa hai thư mục.
Tuy nhiên, nếu tôi cd vào testing.git (aka: repo trần), git fetch/git reset --soft không thể cập nhật repo trần lên phiên bản mới nhất.
$ ls
branches config description HEAD hooks info objects packed-refs refs
$ git fetch
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From localhost:testing
* branch HEAD -> FETCH_HEAD
$ git reset --soft
$ cd ..
$ git clone ./testing.git testing3
Cloning into testing3...
done.
$ cd testing3
$ diff test ../testing2/test
5a6
> testline
Như bạn có thể thấy từ ví dụ cuối cùng, kho lưu trữ trống không thể cập nhật và có sự khác biệt giữa hai tệp. Tôi đã làm gì sai?
Cảm ơn trước
Cảm ơn. Rất nhiều vấn đề dường như bắt nguồn từ sự thiếu hiểu biết về phân nhánh của tôi ... vì vậy tôi chắc chắn sẽ đọc nó. – Dragontamer5788
Nếu bạn muốn tìm nạp chúng một cách thường xuyên, bạn nên xem xét: '' git config remote.origin.fetch + refs/heads/*: refs/heads/* '', cho phép bạn gõ '' git fetch '' để đồng bộ hóa các nhánh của bạn với điều khiển từ xa. Lưu ý rằng điều này chỉ có ý nghĩa trong một kho lưu trữ trống, nơi các nhánh cục bộ không được sửa đổi. – vaab
@ColinDBennet cảm ơn bạn đã chỉnh sửa :) – VonC