Câu trả lời này cố gắng giải quyết làm thế nào để khiến các lập trình viên cao cấp quan tâm git
, chứ không phải về cách học git
nhanh nhất - vì điều đó, cuốn sách git xuất sắc là tuyệt vời, hoặc bất kỳ số lượng hướng dẫn nào (=> Google). Liên kết tốt để đi với câu trả lời này là Git là một cấu trúc dữ liệu hoàn toàn chức năng hoặc đặc biệt là cách ngắn git lưu trữ dữ liệu của bạn .
Tôi sợ rằng tôi có một cái nhìn khá ảm đạm về điều này. Tôi đã ở chính xác đôi giày của bạn - Tôi là một git
mọt sách và muốn biến đổi một đội từ đó svn
, hãy đối mặt với nó, kết quả rất nhỏ. Trong trường hợp của tôi, điều đó đã dẫn đến việc tôi chủ động thay đổi nhận thức của chính mình và chấp nhận rằng mọi người, chỉ là không thể "buộc phải hạnh phúc". Con người không phải là máy tính, thật khó để lập trình chúng. Tôi vẫn hạnh phúc vì đã cố gắng, nó đã cho tôi thấy một cách khá mềm mỏng những gì tôi làm và những gì tôi không muốn làm trong cuộc sống chuyên nghiệp của mình.
Có những người bắt đầu có động lực khi những thứ mới được tham gia, và có những người bị mất điều kiện. Điều này không liên quan gì git
, nhưng git
cụ thể là bạn luôn có tác dụng "tại sao chúng ta nên sử dụng nó nếu svn
nó vẫn ổn?", Đó là một rào cản tâm lý lớn.
Ngoài ra, thực sự mò mẫm git
đòi hỏi một sự quan tâm mạnh mẽ trong các cấu trúc dữ liệu trừu tượng. Nghe có vẻ khó tin, nhưng theo kinh nghiệm của tôi, có những lập trình viên không có hứng thú với điều đó và họ cảm thấy buồn chán và quá tải bởi các yếu tố phức tạp hơn các mảng đơn giản. Bạn có thể tranh luận qua lại xem liệu những người đó có nên làm công việc họ đang làm không, nhưng đó là những gì nó được.
Nếu mọi người không quan tâm đến nó, họ sẽ không hiểu nó. Đơn giản và đơn giản. Tôi cá rằng sự không quan tâm là lý do chính của điểm kém ở trường, không thiếu trí thông minh.
Điều đó nói rằng, đây sẽ là một chương trình giảng dạy như tôi sẽ áp dụng nó, dựa trên sự tích lũy kiến thức từ dưới lên trên. Nó không làm việc cho tôi, nhưng bạn có thể lấy nó làm nguồn cảm hứng để tự mình lăn lộn.
GUI
Mặc dù cách tiếp cận sau đây không nhất thiết cần hỗ trợ GUI cho các hành động ( git add
trong kho lưu trữ thế giới xin chào ...), nhưng nó giúp ích rất nhiều để có GUI để trực quan hóa kho lưu trữ, ngay từ đầu. Nếu bạn không thể quyết định sử dụng cái nào, thì hãy dùng gitk
như là phương sách cuối cùng. Nếu kẻ của bạn sử dụng bất kỳ loại trình soạn thảo trực quan nào, hãy tìm git
thành phần GUI của họ .
Cấu trúc dữ liệu (tĩnh) là chính
Bắt đầu bằng cách giải thích các loại dữ liệu nội bộ (chỉ có ba cộng một trong số chúng: đốm, cây, cam kết, thẻ chú thích, cuối cùng không có gì đáng lo ngại ở giai đoạn này) và cấu trúc của chúng. Bạn có thể dễ dàng làm điều đó trên bảng trắng / bằng bút chì; Cây rất dễ vẽ vì nó không bao giờ có thể thay đổi, bạn có thể chỉ cần thêm công cụ mọi lúc. Bạn có thể thực hiện một phiên chơi trong kho lưu trữ cục bộ mới được tạo và sử dụng git cat-file
để xem xét các đối tượng thực tế để cho họ thấy rằng thực tế chúng là tầm thường như quảng cáo.
Nếu bạn có thể giúp họ hiểu rằng
- ... thực sự chỉ có 3 loại đối tượng trong lịch sử, tất cả chúng đều rất đơn giản, gần như tầm thường và
- ... hầu hết các
git
tiểu ban chỉ "xoa bóp" các đối tượng đó bằng cách này hay cách khác, với các hoạt động gần như tầm thường (về cơ bản, chỉ có một: thêm một cam kết mới ở đâu đó) và ...
- ... mọi thứ có thể dễ dàng được nhìn thấy ngay trước mặt bạn
ls
và git cat-file
...
sau đó họ sẽ có bản dịch tinh thần về những gì thực sự có trong kho lưu trữ. Tại thời điểm này, các seniours có thể nhớ rằng phần bên trong của svn
ma thuật phức tạp (từng có vấn đề với các khóa bên trong kho svn, hoặc với các nhánh "tái hòa nhập" và như vậy?), Và điều này có thể thúc đẩy họ một chút.
Một vấn đề, cụ thể với mọi người đã từng svn
, là làm quen với ý tưởng rằng một cam kết (đối tượng, không phải hành động) luôn là toàn bộ cây thư mục. Trong svn
, mọi người được sử dụng để cam kết các tập tin cá nhân. Đó là một cách tiếp cận hoàn toàn khác nhau. Ồ, và thực tế là cùng một thuật ngữ "cam kết" được sử dụng cho cả một đối tượng tĩnh và một hành động cũng không giúp được gì.
Vấn đề khác đối với các svn
chàng trai là svn
sử dụng lịch sử tuyến tính chứ không phải cây. Đây là, một lần nữa, rất khác nhau. Vì vậy, đây là thời điểm để chỉ ra những khác biệt này rất nhiều .
Hành động giải thích về mặt cấu trúc
Khi họ đã hiểu những phần mà một git
kho lưu trữ được tạo ra, đó là lúc để cho họ thấy chính xác những gì các tiểu ban riêng lẻ git
làm về những phần đó.
Tôi đang nói về add
, commit
kết hợp với thư mục làm việc cục bộ và giai đoạn (đảm bảo rằng họ hiểu rằng thư mục làm việc không giống với khu vực tổ chức không giống với kho lưu trữ).
Khi họ đã hiểu rằng các lệnh này chỉ đơn giản là trồng cây (trong đó, một lần nữa, ở giai đoạn này, bao gồm 3 loại - đốm, cây, cam kết, không chỉ cam kết), bạn có thể thực hiện trước git push
và git pull
(ở chế độ chuyển tiếp nhanh! ) để hiển thị cho họ theo git
nghĩa đen chỉ đẩy các đối tượng của nó xung quanh, rằng băm thực sự chỉ là băm nội dung, mà bạn có thể dễ dàng sao chép nội dung này xung quanh bằng lệnh sao chép hệ thống tệp, v.v.
Rõ ràng, tránh xa bất kỳ tùy chọn không quan trọng nào của các lệnh đó, chúng ta đang nói git add hello.txt
ở đây.
Chi nhánh
Lưu ý rằng việc phân nhánh đặc biệt khó khăn với svn
mọi người, vì nó hoàn toàn khác nhau. Các svn
mô hình là nhiều dễ dàng hơn để hình dung, như có về cơ bản là không có gì để hình dung - đó là theo quan điểm của đồng bằng. Các git
mô hình không quá nhiều. Hãy chắc chắn rằng họ nhận thức được ngay từ đầu rằng các nhánh và thẻ chỉ là "ghi chú dán" chỉ ở đâu đó và không thực sự "tồn tại" theo lịch sử tĩnh, bất biến.
Sau đó làm ví dụ sau ví dụ dễ dàng để hiển thị những gì bạn thực sự có thể làm với họ. Khi bản thân bạn dường như đã quen git
, bạn sẽ không gặp khó khăn trong việc tìm kiếm động lực ở đó. Hãy chắc chắn rằng họ luôn xem điều này theo cách cây phát triển.
Nếu họ có điều đó, bạn có thể giải thích git pull
nó thực sự như thế nào git fetch && git merge
; làm thế nào tất cả các kho lưu trữ thực sự chứa chính xác cùng một đối tượng ( git fetch
gần giống như sao chép nội dung scp
bên trong thư mục đối tượng git), v.v.
Có lẽ, nếu đến lúc này bạn chưa đạt được để đánh thức sự quan tâm của họ, thì bạn cũng có thể từ bỏ, nhưng nếu họ có thể đi xa hơn, thì họ có tất cả các công cụ tinh thần theo ý của họ, và sẽ có rất ít sợ liên quan nữa. Phần còn lại (git workflow ...) nên xuống dốc sau đó.
Những từ cuối
Điều này nghe có vẻ như rất nhiều nỗ lực, và nó thực sự là. Đừng bán cái này dưới dạng "chúng tôi cần cái này cho dự án này" nhưng "điều này giúp cá nhân bạn phát triển và sẽ giúp bạn trong tất cả các tương tác tiếp theo của bạn". Bạn cần rất nhiều thời gian cho việc này, và thời gian là tiền bạc. Nếu bạn không có sự chấp nhận của ban quản lý về điều này, điều đó có thể không có giá trị; bạn có thể nên nói chuyện với sếp của bạn.
Nếu bạn quyết định bạn muốn từ bỏ giảng dạy phát triển những người dường như không có khả năng nắm bắt nó, nhưng bạn hoàn toàn phải sử dụng git
trong tương lai, xem xét thay thế tất cả các tương tác với git
các lệnh bằng script nấu-up hoặc một số giao diện mà mất tất cả git
chi tiết cụ thể đi. Đổ tất cả các kiểm soát lỗi, vv trong các kịch bản, và cố gắng để làm việc đó.