Từ TFS đến Git


14

Tôi là nhà phát triển .NET và tôi đã sử dụng TFS (máy chủ nền tảng nhóm) làm phần mềm kiểm soát nguồn của mình nhiều lần. Các tính năng tốt của TFS là:

  1. Tích hợp tốt với Visual Studio (vì vậy tôi làm hầu hết mọi thứ một cách trực quan; không có lệnh console)
  2. Dễ dàng kiểm tra, quá trình kiểm tra
  3. Dễ dàng hợp nhất và giải quyết xung đột
  4. Xây dựng tự động dễ dàng
  5. Phân nhánh

Bây giờ, tôi muốn sử dụng Git làm xương sống, kho lưu trữ và kiểm soát nguồn của các dự án nguồn mở của mình. Các dự án của tôi là ngôn ngữ C #, JavaScript hoặc PHP với cơ sở dữ liệu MySQL hoặc SQL Server làm cơ chế lưu trữ.

Tôi chỉ sử dụng trợ giúp của github.com cho mục đích này và tôi đã tạo một hồ sơ ở đó và tải xuống GUI cho Git. Cho đến phần này là rất dễ dàng.

Nhưng tôi gần như bị mắc kẹt trong việc đi xa hơn nữa. Tôi chỉ muốn thực hiện một số thao tác đơn giản (thực sự đơn giản), bao gồm:

  1. Tạo một dự án trên Git và ánh xạ nó vào một thư mục trên máy tính xách tay của tôi
  2. Kiểm tra / kiểm tra trong các tập tin và thư mục
  3. Giải quyết xung đột

Đó là tất cả những gì tôi cần làm bây giờ. Nhưng có vẻ như GUI không thân thiện với người dùng. Tôi hy vọng GUI sẽ có một Connect To...cái gì đó tương tự, và sau đó tôi mong đợi một danh sách các dự án sẽ được hiển thị và khi tôi chọn một, tôi sẽ thấy danh sách các tệp và thư mục của dự án đó, giống như khám phá dự án TFS của bạn trong Visual Studio. Sau đó, tôi muốn có thể nhấp chuột phải vào một tập tin và chọn check-in...hoặc những check-outthứ tương tự.

Tôi có mong đợi nhiều không? Tôi nên làm gì để dễ dàng sử dụng Git giống như TFS? Tôi đang thiếu gì ở đây?


8
Tôi đã chuyển từ SVN sang git một năm trước và tôi rất vui vì điều đó. Tôi sẽ KHÔNG giới thiệu SVN cho bất cứ ai ngoại trừ một người ghét dòng lệnh cứng nhắc. Một khi bạn học git, bạn sẽ thích nó.
maaartinus

14
Tại sao mọi người windows bị ám ảnh về giao diện đồ họa?
tdammers

8
@tdammers Vì dòng lệnh trên Windows hút như địa ngục? Tôi biết, có PowerShell, nhưng họ có sử dụng nó không?
maaartinus

3
@Saeed, để bắt đầu, bạn đang mong đợi rằng có bất kỳ điều gì như kiểm tra tệp vào và ra trong git. Không có VCS có thể sử dụng đã có điều đó trong nhiều năm.
Daniel Roseman

1
Đề nghị đọc: ericsink.com/entries/vcbe_print_edition_free.html Nó giải thích các vấn đề cơ bản về kiểm soát phiên bản và sự khác biệt giữa tập trung và phi tập trung (vẫn có thể sử dụng máy chủ trung tâm, tâm trí.)
Inca

Câu trả lời:


19

Những lợi thế git đã đến từ việc đưa ra rất nhiều giả định cũ về những gì một VCS nên làm. Những nhược điểm git xuất phát từ việc không thể tận dụng kinh nghiệm trước đó và không thể làm mọi thứ theo cách bạn đã quen.

Nếu bạn định chuyển từ thứ khác sang git, hãy thử bắt đầu tabula-rasa (mặc dù không thể thực sự làm trong thực tế). Đánh giá nó dựa trên những gì nó làm và nó hoạt động tốt như thế nào, chứ không phải dựa trên cách nó làm so với cách bạn đã quen làm nó. Không phải là bạn mong đợi quá nhiều, đó là những kỳ vọng của bạn là trực giao với những gì git cung cấp. Nếu bạn kết hôn với hoạt động GUI, bạn sẽ thất vọng. Git có sẵn các công cụ gui, nhưng chúng không thêm nhiều. Đó không phải là một thất bại khi cung cấp cho họ nhiều như vậy mà không có nhiều gui có thể thêm vào. GitK không giúp đỡ, không phải trong các hoạt động hàng ngày, mà là trực quan hóa cấu trúc chi nhánh và kiểm tra hoặc tìm kiếm lịch sử.

Đây là một sự tương tự ngớ ngẩn cho những gì tôi có nghĩa là "trực giao". Một trong những điều bạn có thể làm với một tờ báo là bọc cá trong đó, hoặc sử dụng nó để xếp một chiếc lồng chim. Nhưng những thứ đó không cần thiết cho chức năng của một tờ báo, đó là những tính năng ngẫu nhiên của hình thức mà nó xuất hiện. Mong đợi git để "kiểm tra tệp" hoặc "cho phép bạn chọn dự án" hoặc cung cấp "kết nối với ... "Là loại giống như mong đợi để có thể quấn cá hoặc xếp lồng chim của bạn với trang web của một tờ báo .


Ooops, tôi quên giải thích chỉnh sửa. Tôi vừa thêm đoạn cuối cùng sau khi thức dậy để uống thêm cà phê và có sự tương tự bật lên trong đầu.
kylben

3
Yêu những ẩn dụ cuối cùng. +1
Yam Marcovic

7

Bạn đã xem xét đồng bóng? Giống như git, nó là một DCVS và cho phép bạn thực hiện tất cả những điều gọn gàng mà người ta có thể làm với một DCVS. Giống như git, có một nhà cung cấp dịch vụ dựa trên đám mây khá tốt (bitbucket). Nhưng, không giống như git, câu chuyện về cửa sổ khá đẹp, bạn không phải là công dân hạng 2. Bạn đã có các tùy chọn công cụ tốt (TortiseHG) và tích hợp Visual Studio (VisualHG) khá tốt.

Mặc dù vậy, sẽ không có gì giống như TFS trong studio hình ảnh - thế giới không có dây theo cách đó.


1
Tôi đồng ý, vài năm trước tôi đã chuyển từ VSS sang Mercurial và đó là một bản hùng ca thực sự. Đột nhiên tôi có thể làm những điều mà tôi không bao giờ nghĩ sẽ thực tế. Sau đó, tôi chuyển đến svnvà bỏ lỡ rất nhiều thứ thật dễ dàng hg. Bây giờ tôi đang di chuyển đến gitvà có cảm xúc lẫn lộn. Tôi thích nhận lại nhiều cơ sở mà tôi đã bỏ lỡ svn, nhưng tôi vẫn bỏ lỡ sự đơn giản hgso với sự phức tạp không cần thiết git. Ngay cả khi chỉ cài đặt TortoiseGit trên các cửa sổ cũng yêu cầu bạn nhảy qua các vòng đơn giản là không cần thiết với TortoiseHg .
Đánh dấu gian hàng

@Mark booth: Tôi đồng ý rằng git không thân thiện với người dùng, nhưng sự phức tạp không cần thiết là gì? Các vấn đề về cài đặt không được tính, chúng có thể được quy cho TortoiseGit (là một chương trình khác) hoặc cho Windows.
maaartinus

Điều này sẽ tốt hơn khi trò chuyện, nhưng tôi thấy không cần bất cứ điều gì cho khu vực chỉ mục / bộ nhớ cache / phân tầng, IMHO mặc định sẽ là cam kết mọi thứ với tùy chọn cam kết một phần nếu được yêu cầu (tốt hơn vẫn là để thay đổi những thay đổi bạn không Không muốn ngay lập tức, chạy lại các bài kiểm tra đơn vị của bạn, cam kết và sau đó hủy bỏ). Tôi cũng ghét phải rõ ràng tạo ra một chi nhánh mới khi tôi muốn. Với hg, một nhánh không tên được tạo ra âm thầm bất cứ khi nào bạn cam kết với một người đứng đầu. Trong git, nếu bạn di chuyển ra khỏi đầu mà không phân nhánh, bạn có khả năng bị mất và sau đó thu gom rác!
Đánh dấu gian hàng

6

Tôi đã chuyển từ SVN sang git một năm trước và tôi rất vui vì điều đó. Tuy nhiên, tôi không dựa vào bất kỳ GUI nào và trong trường hợp bạn cứng nhắc từ chối dòng lệnh thì đó có thể là một vấn đề.

Bạn dường như mong đợi gitlàm việc theo cách bạn đã từng làm, nhưng nó không. Nó không khó, nhưng bạn nên xem qua các nguyên tắc của nó trước khi tiếp tục.

Tạo một dự án trên Git và ánh xạ nó vào một thư mục trên máy tính xách tay của tôi

Git được phân phối, có nghĩa là bạn luôn làm việc với kho lưu trữ cục bộ của mình, có thể được ánh xạ tới bất kỳ số lượng từ xa nào, kể cả số không. Khi chơi với dự án của người khác, tôi đang sử dụng hai điều khiển từ xa: kho git hoặc SVN của họ và máy chủ của riêng tôi.

Tôi luôn bắt đầu bằng cách tạo một thư mục trống và sau đó git inithoặc git clone SOME-REMOTE-REPOSITORY. Liên kết này có thể giúp bạn.

Kiểm tra / kiểm tra trong các tập tin và thư mục

Bạn đã bỏ lỡ để viết những gì GUI bạn đang sử dụng. Cả hai TortoiseGitgit-guichắc chắn có thể làm điều đó.

Giải quyết xung đột

Đối với điều này tôi đang sử dụng git-guihoặc trình soạn thảo văn bản yêu thích của tôi.

Tôi hy vọng GUI sẽ có Kết nối với ... hoặc một cái gì đó tương tự

Kết nối với cái gì, khi có thể có từ xa 0 đến N? Git không kết nối với máy chủ từ xa, nó chỉ tạo kết nối tạm thời và chỉ cho một vài lệnh làm việc với kho lưu trữ từ xa. Hầu hết các công việc được thực hiện tại địa phương.

sau đó tôi mong đợi một danh sách các dự án sẽ được hiển thị

Tôi đang giả sử projectsbạn có nghĩa là repositories.

Tôi sợ không có điều đó. Git trên một máy chủ từ xa chỉ hoạt động nghiêm ngặt với một kho lưu trữ. Liệt kê tất cả các kho lưu trữ tương đương với việc liệt kê tất cả các thư mục chứa thư mục con .git. Tôi chắc chắn có một cái gì đó như thế này trên GitHub.

Tôi chọn một, tôi hy vọng sẽ thấy danh sách các tệp và thư mục của dự án đó, giống như khám phá

Một lần nữa, tôi sợ không có điều đó, vì gitlàm việc tại địa phương. Và một lần nữa, nó sẽ không được sử dụng nhiều. Đơn giản chỉ cần sao chép kho lưu trữ và khám phá nó trên máy tính của bạn. Mặc dù nhân bản các repos khổng lồ mất một thời gian, tất cả các hoạt động tiếp theo nhanh hơn nhiều và bạn có thể xem xét bất kỳ cam kết hoặc chi nhánh nào.

Sau đó, tôi muốn có thể nhấp chuột phải vào một tệp và chọn đăng ký ... hoặc thanh toán và những thứ tương tự.

Một lần nữa, gitlàm việc tại địa phương. Vì vậy, sẽ không có ý nghĩa gì khi đăng ký hoặc trả phòng cho một repo từ xa. Làm việc theo cách này là một sự lãng phí thời gian ngay cả trên một mạng LAN nhanh. Nhận kho lưu trữ vào máy tính của bạn, làm việc với nó và git pushcác thay đổi cho điều khiển từ xa. Hãy suy nghĩ về nó như về việc xuất bản các thay đổi của bạn và cũng tạo bản sao lưu. Bạn nên cam kết tại địa phương rất thường xuyên .

Trước khi bạn bắt đầu công việc của mình, git fetchhoặc git pullnhững thay đổi từ xa trong trường hợp ai đó có thể đã làm việc với nó.

Tôi có mong đợi nhiều không?

Có và không. Bạn mong đợi một cái gì đó khác với những gì nó cung cấp. Bạn có thể nhận được một cái gì đó tốt hơn nhiều, gitmạnh mẽ, linh hoạt, an toàn, nhanh như địa ngục và có thể làm mọi thứ bạn cần, nhưng nó không thể bắt chước chính xác những gì một VCS tập trung làm.


5

Tôi đã làm cho journy từ nguồn hình ảnh an toàn đến tfs để svn để git.

Đi từ vss đến tfs là một kinh nghiệm thú vị. Đi từ tfs đến svn là một trải nghiệm thú vị. Đi từ svn đến git đã là một cuộc chiến nội bộ.

Thường thì tôi thấy mình khá bảo thủ và tôi cố gắng bám vào những gì hiệu quả. Một gui tốt đẹp dành cho tôi hơn là dòng lệnh và tôi thấy mình đang tìm kiếm một số gui cho phép tôi chơi với những đứa trẻ tuyệt vời mà tôi làm việc cùng. Tất cả đều sử dụng git với dòng lệnh dành riêng.

Khoảnh khắc eureka đối với tôi đã đến khi tôi từ bỏ việc tìm kiếm một viên đạn bạc và bắt đầu thử git bash (tôi vẫn đang học).

Tôi có một số guis được cài đặt và chúng bổ sung git từ dòng lệnh. Phần mở rộng Git, nhà cung cấp kiểm soát nguồn Git cho studio hình ảnh và git rùa. Nhưng tôi nói làm quen với git bash. Các lệnh có thể hơi khó hiểu nhưng một khi bạn tìm hiểu chúng, chúng sẽ nhanh hơn gui rất nhiều.

Phân nhánh với git chỉ là TUYỆT VỜI so với những người khác. Tạo các nhánh và chuyển đổi giữa các nhánh nó gần như ngay lập tức. Bạn có thể làm những việc bạn không muốn làm với svn vì về cơ bản svn sao chép bản sao làm việc của bạn (ít nhất là cách tôi đã làm).

Tôi thấy Git có đường cong học tập dốc hơn svn. Nhưng một khi bạn "hiểu" với git, bạn không muốn quay lại.

Git tất cả các cách.


5

Bạn đã từng có một máy chủ lưu trữ các tệp của mình và là chủ sở hữu toàn năng của chúng. Để chỉnh sửa một tập tin, bạn phải xin phép máy chủ.

Git không như thế. Hãy nghĩ về git theo cách này: bạn có kho lưu trữ cục bộ của bạn. Git cho phép bạn thực hiện các thay đổi, cam kết ngược lại, phân nhánh dễ dàng và nhanh chóng, v.v. Khi bạn muốn sao lưu lịch sử kiểm soát nguồn của mình, bạn đẩy các thay đổi của mình sang một kho lưu trữ khác , "tình cờ là" một máy chủ, như GitHub.com.

Quy trình làm việc:

  1. Clone (Tải xuống) / Tạo kho lưu trữ
  2. Thực hiện một số thay đổi. Tiếp tục với sự phát triển mà không quan tâm đến người khác.
  3. Đẩy sang kho lưu trữ khác (có thể là máy chủ như GitHub).
  4. Khi bạn đẩy đến một kho lưu trữ, chủ sở hữu của kho lưu trữ khác được thông báo về việc đẩy đang chờ xử lý và phải quyết định có chấp nhận các cam kết đó, từ chối chúng hay chỉ lấy một tập hợp con của chúng.
  5. Chu kỳ tiếp tục.

Đó là tất cả.


1

Ý bạn là gì, "git gui? Có một số lượng lớn trong số họ, bao gồm một plugin để tích hợp phòng thu trực quan, nếu tôi nhớ chính xác. Nếu một GUI không phù hợp với bạn, hãy thử thêm một số cho đến khi bạn tìm thấy một GUI. Cá nhân tôi sử dụng các GUI khác nhau cho các tác vụ khác nhau (và CLI cho các tác vụ khác).

Tuy nhiên, git là một khung kiểm soát phiên bản hơn là một hệ thống cố định. Bạn vẫn sẽ phải học một số điều cơ bản để tận dụng tối đa nó.


-2

Tôi có mong đợi nhiều không?

Đúng

Tôi nên làm gì để dễ dàng sử dụng Git giống như TFS?

Không có gì. Git là trung tâm CLI và không có bất kỳ giao diện tốt nào (tôi biết về TortoiseGit, không trả lời, so với các Rùa khác *). Bạn có thể thử sử dụng SmartGit (hãy cẩn thận với Java)


1
-1: Kiểm tra tệp vào / ra và giải quyết xung đột không phải là 'mong đợi nhiều' từ kiểm soát nguồn.
Steven Evers

2
+1 Kiểm tra chúng trực tiếp từ một máy chủ từ xa đơn giản là vô nghĩa. Nó chỉ để làm chậm, thậm chí qua mạng LAN. Làm những việc như vậy là một cái gì đó FTP dành cho, không phải VCS.
maaartinus

1
Các tệp "Kiểm tra vào / ra" không phải là một hoạt động cơ bản cho một VCS. Đây là một tính năng triển khai phổ biến đối với hầu hết các VCS, và một tính năng có tác dụng phụ tinh tế nhưng đáng tiếc.
kylben

2
@kylben: kiểm tra vào / ra là một cách để xem kiểm soát phiên bản; chỉnh sửa và hợp nhất là một cách khác. Một số VCS sử dụng phương pháp trước đây, cung cấp cho bạn các khóa độc quyền và khả năng kiểm tra các tệp riêng lẻ; những người khác lấy cái sau và với những cái đó, bạn tải xuống toàn bộ kho lưu trữ, thực hiện các thay đổi cục bộ của bạn và sau đó đẩy chúng trở lại từ xa; VCS đảm nhiệm việc quản lý các thay đổi xung đột, yêu cầu đầu vào của bạn trong trường hợp có nghi ngờ. Không có cách tiếp cận nào tốt hơn, nhưng bạn thường không thể bẻ cong một VCS thành phương pháp mà nó chưa được thực hiện.
tdammers

1
Bằng cách 'kiểm tra vào / ra', tôi thực sự đã nói về cách triển khai các thứ của VCS dựa trên khóa, chứ không phải cách bạn có thể tải xuống các tệp nguồn để chỉnh sửa (đó thực sự là điều mà mọi VCS phải làm được). Thực tế là nhiều VCS đề cập đến quá trình tải xuống một tệp dưới dạng 'thanh toán' là một chút sai lầm của IMO - không có gì được kiểm tra và kho lưu trữ không nhớ ai có tệp.
tdammers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.