Tôi vừa mới bắt đầu sử dụng git và ấn tượng với sự khác biệt về quy trình làm việc của SVN, nhưng tôi đã gặp phải một câu hỏi về cấu trúc/thiết lập mà tài liệu dường như không trực quan giải thích cách thiết lập và tôi tự hỏi nếu nó thậm chí có thể. Thiết lập của tôi là tôi có một số máy tính tôi phát triển từ (máy tính để bàn và máy tính xách tay), vì vậy, để dễ dàng đồng bộ và cung cấp sao lưu cho kho git, tôi thiết lập kho lưu trữ "công khai" trên trang chủ của mình Linux máy chủ mà tôi có thể ssh vào từ cả máy tính để bàn và máy tính xách tay. Nó không thực sự công khai, vì nó yêu cầu quyền truy cập SSH vào hộp để truy cập.Thiết lập kho Git để phát triển từ hai máy?
Sự cố của tôi xuất hiện khi tôi thực hiện thay đổi trên máy tính để bàn, tôi có thể dễ dàng đẩy các thay đổi vào kho lưu trữ máy chủ (tôi có cờ mirror
được đặt cho điều khiển từ xa origin
) và sử dụng gitx
. các trạng thái từ xa trông giống hệt nhau và mỗi cam kết cá nhân của tôi đã được đăng nhập vào máy chủ.
Câu hỏi đặt ra là khi tôi chuyển sang máy tính xách tay mà tôi thường sử dụng, kho lưu trữ git có thể có một số cam kết đằng sau phiên bản máy chủ và cần được cập nhật. Tôi bắt đầu sử dụng git pull
để có được những thay đổi cục bộ, nhưng thay vì sao chép tất cả các cam kết riêng lẻ trên máy chủ vào kho lưu trữ cục bộ, nó thêm một cam kết 'hợp nhất' mới vào kho lưu trữ cục bộ và gitx
hiển thị hợp nhất trong nhánh kho từ xa tại đó điểm.
Có lệnh/quy trình làm việc nào để tôi cập nhật kho lưu trữ cục bộ về trạng thái chính xác của kho lưu trữ từ xa (chẳng hạn nếu tôi làm git push --mirror
không có dữ liệu nào bị mất)? Tôi có phải xóa kho lưu trữ cục bộ của mình mỗi lần và git clone
lại một lần nữa không?
Hiện tại không có ai khác cần quyền truy cập vào kho lưu trữ này, mặc dù trong tương lai nó có thể trở thành kho lưu trữ công cộng để mọi người rút khỏi, vì vậy các câu trả lời không phá hủy khả năng đó sẽ được đánh giá cao.
Chỉnh sửa: Cam kết của tôi bao gồm việc xóa các nhánh khỏi nhánh chính; đó có thể là những gì kích hoạt lệnh git pull
để hiển thị dưới dạng hợp nhất không? Có phải cờ --rebase
là những gì tôi cần không?
Giải pháp Giải thích: Hóa ra tôi đã làm những điều sau đây để thiết lập các kho của tôi:
- Sử dụng máy tính xách tay để khởi tạo một kho git
- kho Đẩy máy tính xách tay đến máy chủ (cam kết Một)
- Thực hiện thay đổi và cam kết trên máy tính xách tay (máy tính xách tay tại cam kết B)
- Desktop kho nhái máy chủ (cam kết Một)
- Thực hiện thay đổi trên máy tính để bàn và cam kết (cam kết C, D, E, bao gồm cả chi nhánh rebasing)
- Desktop đẩy đến máy chủ (server Fast- về phía trước để E)
- Khi máy tính xách tay kéo từ máy chủ, kết quả trong một hợp nhất (vì B không thể nhanh chóng chuyển tiếp đến E).
- Máy tính xách tay hợp nhất và đẩy các thay đổi đối với máy chủ
- Máy tính để bàn giờ đây cũng phải hợp nhất.
Do đó thêm một cam kết đó là một lỗi mới không chủ định, nó khiến tôi nghĩ rằng nó sẽ luôn là một sự hợp nhất. Theo gợi ý của Xentac, tôi quay trở lại và tìm thấy trên máy tính xách tay mà tôi đã thực hiện một hợp nhất không được đẩy tới máy chủ, đó là thủ phạm, và một khi tôi có cả ba thực sự đồng bộ, git pull --ff
(chỉ cần hợp nhất nhanh về phía trước)) hoạt động tốt và cảnh báo tôi nếu có điều gì đó không đồng bộ trước khi thực hiện hợp nhất.