Tôi đã tạo một repo trần để xuất bản kho lưu trữ của mình, nhưng tôi không thể tìm ra cách cập nhật repo trần với trạng thái hiện tại của kho lưu trữ chính.
Tôi đã tạo một repo trần để xuất bản kho lưu trữ của mình, nhưng tôi không thể tìm ra cách cập nhật repo trần với trạng thái hiện tại của kho lưu trữ chính.
Câu trả lời:
Nếu bạn muốn sao chép tất cả các đối tượng từ repo chính, hãy làm điều này bên trong repo chính:
git push --all <url-of-bare-repo>
Ngoài ra, thực hiện tìm nạp bên trong repo trần:
git fetch <url-of-main-repo>
Bạn không thể thực hiện việc kéo, bởi vì một lần kéo muốn hợp nhất với HEAD
điều mà một repo trần không có.
Bạn có thể thêm chúng dưới dạng điều khiển từ xa để tiết kiệm cho mình một số thao tác gõ trong tương lai:
git remote add <whatever-name> <url-of-other-repo>
Sau đó, bạn có thể chỉ cần làm
git push --all <whatever-name>
hoặc là
git fetch <whatever-name>
tùy thuộc vào repo bạn đang ở đâu. Nếu <whatever-name>
là origin
, bạn thậm chí có thể bỏ nó hoàn toàn.
Tuyên bố từ chối trách nhiệm: Tôi không phải là một guru guru. Nếu tôi nói điều gì đó sai, tôi muốn được giác ngộ!
Cập nhật: Đọc các bình luận!
git-fetch --all
kho lưu trữ bên trong, tôi không thấy các bản cập nhật tôi đã thực hiện cho repo chính, nhưng khi đẩy chúng từ repo chính với git push --all <url-of-bare-repo>
tôi thì tôi thấy các bản cập nhật git log
. Có lẽ có một lời giải thích đơn giản cho điều này - ai đó có thể giải thích?
git log
không hiển thị những cập nhật này trong repo trần. (Không git log --all
, và cũng không phải là một repo hoạt động được tạo bằng cách nhân bản repo trần - thông qua git log --all
hoặc chỉ đơn giản là nhìn vào các tệp mới sẽ hiển thị ở đó). Đó là một thử nghiệm khá nhanh để xem cho chính mình. Chủ yếu tôi chỉ tò mò những gì tôi đang thiếu.
git fetch -q origin master:master
bên trong repo trần địa phương của mình. Điều này sẽ lấy các công cụ mới từ nhánh chính của github và cập nhật nhánh chính cục bộ của bạn lên nhánh đó.
master:master
những gì được yêu cầu để di chuyển TRƯỚC về phía trước của repo từ xa. Trong trường hợp của tôi vì một vấn đề, tôi không thể kết nối với repo trần của chúng tôi nữa vì git đã bị mất. Cho đến khi nó được giải quyết, tôi làm một đường hầm ngược và tìm đến repo trung tâm bằng cách sử dụng: git fetch ssh://localhost:8765/... master:master
và nó hoạt động như một lá bùa. Cảm ơn!
git fetch origin *:*
Tôi đã tạo một kho lưu trữ bằng lệnh sau
git clone --bare <remote_repo>
Sau đó, tôi đã cố gắng cập nhật bản sao trần bằng câu trả lời của Thomas, nhưng nó không hoạt động với tôi. Để có được kho lưu trữ trần để cập nhật (đó là những gì tôi nghĩ Let_Me_Be đã yêu cầu), tôi đã phải tạo một kho lưu trữ nhân bản:
git clone --mirror <remote_repo>
Sau đó, tôi có thể chạy lệnh sau trong kho lưu trữ được nhân đôi để lấy các bản cập nhật của kho chính:
git fetch --all
Tôi đã xem qua giải pháp này bằng cách đọc Mirror a Git Rep Storage bằng cách kéo
[remote "origin"]
phần, thêm fetch = +refs/*:refs/*
vàmirror = true
Giải pháp duy nhất ngoài việc tái tạo với git clone --mirror
là từ Gregor :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
sau đó bạn có thể git fetch
và bạn sẽ thấy các bản cập nhật. Điều kỳ lạ là trước đây, mặc dù đã được remote
cấu hình, nó không có các nhánh được liệt kê trong đó git branch -a
.
git remote update
thực hiện công việc.
--force
và --prune
tương ứng vào git fetch
dòng.
Giả định:
$ git clone --bare https://github.com/.../foo.git
Tìm nạp với:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Lưu ý: --git-dir=foo.git
không bắt buộc nếu bạn cd
vào thư mục trước.
origin
không được xác định, bạn luôn có thể thay thế origin
phần đó bằng đường dẫn / url vào kho lưu trữ ban đầu của bạn. ví dụ$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
Sau nhiều lần lộn xộn, tôi thấy rằng điều này hiệu quả với tôi.
Một lần:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Mọi lúc tôi muốn đồng bộ hóa:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
) là chìa khóa. Câu trả lời tốt, cảm ơn!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
này là câu trả lời. Sau khi nhấn lệnh này, tôi chỉ có thể git fetch
và repo đồng bộ với điều khiển từ xa.
Thêm kho lưu trữ trần như một kho lưu trữ từ xa, sau đó sử dụng git push
.
Đối với tôi sự kết hợp này đã làm việc:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
-u tham số để tìm nạp là cần thiết, nếu không tôi nhận được thông báo lỗi: "Từ chối tìm nạp vào refs / Heads / master của kho lưu trữ không trống" (xem thêm https://stackoverflow.com/a/19205680/4807875 )