Điều này sẽ nghe có vẻ phản trực giác, nhưng hãy nghe tôi nói:
Khuyến khích họ bắt đầu thử nghiệm với git
Một trong những điều thú vị về git là thật dễ dàng để thực hiện bất kỳ hoạt động địa phương nào hoàn toàn an toàn. Khi tôi lần đầu tiên bắt đầu sử dụng git, một trong những điều tôi thấy mình đang làm là nén toàn bộ thư mục để sao lưu trong trường hợp tôi làm hỏng cái gì đó. Sau đó tôi phát hiện ra rằng đây là một loại bùn khổng lồ và gần như không bao giờ thực sự cần thiết để bảo vệ công việc của bạn, nhưng nó có ưu điểm là rất an toàn và rất đơn giản, ngay cả khi bạn không biết bạn đang làm gì và làm thế nào lệnh bạn muốn thử sẽ bật ra. Điều duy nhất bạn phải tránh khi bạn làm điều này là push
. Nếu bạn không thúc đẩy bất cứ điều gì, đây là cách an toàn 100% để thử bất cứ điều gì bạn muốn.
Sợ thử đồ là một trong những cản trở lớn nhất đối với việc học git. Nó mang lại cho bạn rất nhiều quyền kiểm soát đối với mọi thứ mà nó gây khó chịu. Thực tế là bạn có thể tuân thủ một vài thao tác rất an toàn cho hầu hết việc sử dụng hàng ngày của bạn, nhưng việc tìm ra những lệnh nào cần thực hiện một số khám phá.
Bằng cách mang lại cho họ cảm giác an toàn , họ sẽ sẵn sàng hơn rất nhiều để cố gắng tìm ra cách tự làm mọi thứ. Và họ sẽ được trao quyền nhiều hơn nữa để tìm ra một luồng công việc cá nhân trên máy cục bộ phù hợp với họ. Và nếu không phải ai cũng làm điều tương tự tại địa phương , thì tốt, miễn là họ tuân thủ các tiêu chuẩn với những gì họ thúc đẩy . Nếu phải nén toàn bộ repo trước khi thực hiện một thao tác để khiến họ cảm thấy như vậy, thì tốt thôi; họ có thể chọn những cách tốt hơn để làm mọi thứ khi họ đi và khi họ thử đồ. Bất cứ điều gì để có được chính mình để bắt đầu thử công cụ và xem những gì nó làm.
Điều này không có nghĩa là đào tạo là vô giá trị. Ngược lại, đào tạo có thể giúp giới thiệu cho bạn các tính năng và mô hình và chuẩn mực. Nhưng nó không phải là một sự thay thế cho việc ngồi xuống và thực sự làm công việc trong công việc hàng ngày của bạn. Cả git và SVN đều không phải là những thứ mà bạn có thể chỉ cần đến một lớp học và sau đó bạn biết mọi thứ về nó. Bạn phải sử dụng chúng để giải quyết vấn đề của mình để làm quen với chúng và những tính năng nào phù hợp với những vấn đề nào.
Ngừng làm họ nản lòng khi học những thứ trong và ngoài của git
Tôi đã đề cập đến việc không thúc đẩy bất cứ điều gì, điều thực sự đi ngược lại với một trong những điều bạn đã dạy họ: luôn luôn "Cam kết & Đẩy". Tôi tin rằng bạn nên ngừng bảo họ làm điều này và bảo họ bắt đầu làm ngược lại. Git về cơ bản có 5 "địa điểm" trong đó các thay đổi của bạn có thể là:
- Trên đĩa, không cam kết
- Dàn dựng nhưng không cam kết
- Trong một cam kết địa phương
- Trong một stash địa phương
- Kho lưu trữ từ xa (Chỉ các cam kết và thẻ được đẩy và kéo giữa các kho khác nhau)
Thay vì khuyến khích họ kéo và đẩy mọi thứ trong một bước duy nhất, hãy khuyến khích họ tận dụng 5 địa điểm khác nhau này. Khuyến khích họ:
Điều này sẽ khuyến khích họ kiểm tra công việc của họ trước khi nó được công khai cho mọi người, điều đó có nghĩa là họ sẽ bắt lỗi sớm hơn. Họ sẽ thấy cam kết và nghĩ, "Đợi đã, đó không phải là điều tôi muốn" và không giống như ở SVN, họ có thể quay lại và thử lại trước khi họ đẩy.
Khi họ đã quen với ý tưởng tìm hiểu các thay đổi của họ ở đâu , sau đó họ có thể bắt đầu quyết định khi nào nên bỏ qua các bước và kết hợp các thao tác nhất định (khi nào nên kéo vì bạn đã biết bạn muốn tìm nạp + hợp nhất hoặc khi nào nên nhấp vào tùy chọn Cam kết & Đẩy) .
Đây thực sự là một trong những lợi ích to lớn của git so với SVN và git được thiết kế với mô hình sử dụng này trong tâm trí. Ngược lại, SVN giả định một kho lưu trữ trung tâm, vì vậy sẽ không có gì đáng ngạc nhiên nếu công cụ cho git không được tối ưu hóa cho cùng một quy trình. Trong SVN, nếu cam kết của bạn sai, thì cách truy đòi thực sự duy nhất của bạn là một cam kết mới để hoàn tác sai lầm.
Làm điều này thực sự sẽ tự nhiên dẫn đến chiến lược tiếp theo:
Khuyến khích họ sử dụng các chi nhánh địa phương
Các chi nhánh địa phương thực sự giảm bớt rất nhiều điểm đau khi làm việc trên các tệp được chia sẻ. Tôi có thể thực hiện tất cả các thay đổi tôi muốn trong chi nhánh của mình và nó sẽ không bao giờ ảnh hưởng đến bất cứ ai vì tôi không thúc đẩy chúng. Sau đó, khi thời gian đến, tôi có thể sử dụng tất cả các chiến lược hợp nhất và rebase giống nhau, chỉ dễ dàng hơn:
- Tôi có thể nổi loạn chi nhánh địa phương của mình, điều này làm cho việc hợp nhất nó thành tầm thường.
- Tôi có thể sử dụng một sự hợp nhất đơn giản (tạo một cam kết mới) trong tổng thể để đưa các thay đổi của chi nhánh địa phương của tôi vào đó.
- Tôi có thể squash hợp nhất toàn bộ chi nhánh địa phương của mình thành một cam kết duy nhất trên chủ nếu tôi nghĩ rằng chi nhánh của tôi quá nhiều thứ để cứu vãn.
Sử dụng các chi nhánh địa phương cũng là một khởi đầu tốt để tìm ra một chiến lược phân nhánh có hệ thống. Nó giúp người dùng của bạn hiểu rõ hơn về nhu cầu phân nhánh của họ, vì vậy bạn có thể chọn chiến lược dựa trên nhu cầu và mức độ hiểu biết / kỹ năng hiện tại của nhóm và không chỉ bỏ qua Gitflow vì mọi người đã nghe về nó.
Tóm lược
Tóm lại, git không phải là SVN và không thể được đối xử như vậy. Bạn cần phải:
- Loại bỏ nỗi sợ hãi bằng cách khuyến khích thử nghiệm an toàn.
- Giúp họ hiểu git khác nhau như thế nào để họ có thể thấy điều đó thay đổi quy trình làm việc bình thường của họ.
- Giúp họ hiểu các tính năng có sẵn để giúp họ giải quyết vấn đề của họ dễ dàng hơn.
Tất cả điều này sẽ giúp bạn dần dần chấp nhận sử dụng git tốt hơn, cho đến khi bạn đạt đến điểm mà bạn có thể bắt đầu thực hiện một bộ tiêu chuẩn.
Tính năng cụ thể
Trước mắt, những ý tưởng sau đây có thể giúp ích.
Nổi loạn
Bạn đã đề cập đến rebase và rằng bạn không thực sự hiểu nó trong câu hỏi của bạn. Vì vậy, đây là lời khuyên của tôi: hãy thử những gì tôi vừa mô tả. Thực hiện một số thay đổi cục bộ trong khi người khác đẩy một số thay đổi. Cam kết thay đổi của bạn tại địa phương . Zip thư mục kho lưu trữ của bạn như là một bản sao lưu. Lấy các thay đổi của người khác. Bây giờ hãy thử chạy một lệnh rebase và xem điều gì xảy ra với các cam kết của bạn! Bạn có thể đọc các bài đăng trên blog vô tận hoặc được đào tạo về rebase và cách bạn nên hoặc không nên sử dụng nó, nhưng không ai trong số đó là sự thay thế để thấy nó hoạt động. Vì vậy, hãy thử nó.
merge.ff=only
Điều này sẽ là một vấn đề sở thích cá nhân, nhưng tôi sẽ đề xuất nó ít nhất là tạm thời vì bạn đã đề cập rằng bạn đã gặp rắc rối với việc xử lý xung đột. Tôi khuyên bạn nên cài đặt merge.ff
thànhonly
:
git config --global merge.ff only
"ff" là viết tắt của "chuyển tiếp nhanh." Hợp nhất chuyển tiếp nhanh là khi git không cần kết hợp các thay đổi từ các cam kết khác nhau. Nó chỉ di chuyển con trỏ của nhánh lên một cam kết mới dọc theo một đường thẳng trong biểu đồ.
Những gì nó làm trong thực tế là ngăn git tự động cố gắng tạo các cam kết hợp nhất. Vì vậy, nếu tôi cam kết một cái gì đó cục bộ và sau đó kéo các thay đổi của người khác, thay vì cố gắng tạo một cam kết hợp nhất (và có khả năng buộc người dùng phải giải quyết các xung đột), việc hợp nhất sẽ thất bại. Trong thực tế, git sẽ chỉ thực hiện a fetch
. Khi bạn không có cam kết cục bộ, việc hợp nhất tiến hành bình thường.
Điều này cung cấp cho người dùng cơ hội để xem xét các cam kết khác nhau trước khi cố gắng hợp nhất chúng và buộc họ đưa ra quyết định về cách xử lý tốt nhất khi kết hợp chúng. Tôi có thể rebase, tiếp tục với việc hợp nhất (sử dụng git merge --no-ff
để bỏ qua cấu hình) hoặc thậm chí tôi có thể tắt việc hợp nhất các thay đổi của mình ngay bây giờ và xử lý nó sau. Tôi nghĩ rằng cú va chạm tốc độ nhỏ này sẽ giúp nhóm của bạn tránh đưa ra những quyết định sai lầm về việc sáp nhập. Bạn có thể để nhóm của mình tắt nó đi khi họ xử lý tốt hơn việc hợp nhất.