2011-06-28 27 views
6

Tôi cố gắng thuyết phục đồng nghiệp của tôi rời khỏi svn và chuyển sang git. Một vấn đề mà tôi thấy sắp tới là: Nó phức tạp và dễ bị lỗi phải thực hiện git commit và git push riêng biệt. Vì vậy, tôi đã suy nghĩ về một bí danh git ci, cam kết những thay đổi và đẩy nó đến máy chủ. Tôi biết, làm thế nào để làm điều đó, nhưng:bí danh git: Cam kết với đối số & đẩy trong một lệnh duy nhất

Vấn đề là, tôi muốn đưa ra các đối số như -m "" để git cam kết. Vì vậy,

git ci -m "Cool change" 

nên thực hiện

git commit -m "Cool change" && git push 

Làm thế nào tôi có thể làm như vậy?

+2

Cudos để cố gắng thuyết phục đồng nghiệp của bạn thực hiện tuyến đường git. Tôi tự hỏi tại sao họ muốn tránh bị bắt và đẩy một cách riêng biệt. Điều gì làm cho bạn nghĩ rằng đó là lỗi dễ bị hoặc phức tạp để làm những công việc một cách riêng biệt? Bạn có thực sự muốn mọi cam kết là một sự thúc đẩy không? –

+1

Tôi đồng ý với Jamie. Việc có thể cam kết tại địa phương mang lại sự tự do to lớn về cách tổ chức công việc của bạn và trong phạm vi chi tiết để cam kết. Bạn có thể thực hiện nhiều cam kết nhỏ để mỗi thay đổi được ghi lại và có thể được hoàn nguyên, nhưng nếu chúng không có ý nghĩa riêng với cộng đồng, bạn có thể đẩy tất cả chúng khi chúng được hoàn tất. – rafalotufo

+0

cộng với bạn được cách ly từ những thứ pesky như băng thông mạng hoặc - thực sự - sẵn có – sehe

Trả lời

0

bạn có thể "ẩn" git giống như dự án "thành tích git". Điều này sẽ cho phép bạn thêm các tập lệnh giống như lệnh git. Luồng cơ bản của bạn nên là:

git pull --rebase 

để lịch sử tuyến tính giống như những gì chúng được sử dụng trong bản cập nhật của SVN. Nhưng bạn phải nói với họ rằng họ có thể cần phải loại bỏ các xung đột và nói với họ về hoặc bí danh git add -A && git rebase --continue. Tôi khuyên bạn nên bật định tuyến lại và chia sẻ các nghị quyết đó trong nhóm với một tập lệnh gắn liền với "bí danh" mà bạn sẽ thực hiện cho việc này.

Tiếp theo, giấu cam kết với một cái gì đó như thế này:

git add -A 
git commit -m "message" 
git pull --rebase 
git push origin <current branch> # or set up tracking and omit the last 2 args 

Những thất bại một cách duyên dáng trên các cuộc xung đột là tốt.

đây là liên kết để git thành tựu:

http://benjamin-meyer.blogspot.com/2010/03/git-achievements.html

Mặc dù tôi nghĩ đây không phải là giúp họ trong thời gian dài, tôi hy vọng điều này sẽ giúp cho bây giờ.

0

Đối với vấn đề chung khi thêm đối số vào một trong nhiều lệnh dưới dạng bí danh, bí danh git hoạt động gần như giống như một bí danh * nix bình thường. Điểm khác biệt duy nhất là trừ khi bí danh git bắt đầu bằng !, giả sử rằng git nên được thêm vào lệnh trước. Bất kỳ đối số nào được sử dụng kết hợp với một bí danh được thêm vào trước, để chèn một đối số vào một chuỗi ký tự của các lệnh bạn cần một số lệnh shell để phân tích các đối số. Xem ví dụ this question cho các đối số.

Nhưng đối với câu hỏi này đặc biệt. Tôi đồng ý với những người khác rằng đây là một việc hữu ích để làm. Nếu bạn định push ngay sau khi commit, tôi giả sử mỗi người dùng có repo riêng của họ (chỉ đọc cho người khác) để push sẽ "không bao giờ" thất bại, nghĩa là nó hoạt động rất khác với svn anyway; họ phải kéo từ các repos khác nhau, vv

Nếu bạn thay vì sử dụng một "repo chính" công khai mà mọi người kéo và đẩy tới, đây sẽ là một ý tưởng tồi tệ hơn, vì khi đẩy chắc chắn sẽ thất bại đôi khi, chúng được đào tạo không sử dụng "cam kết" sau đó "đẩy" nhưng sử dụng bí danh "ci" của bạn để cam kết và đẩy các thay đổi; Khi họ cố gắng "tái cam kết" những thay đổi phần thứ hai sẽ không chạy bởi vì lệnh đầu tiên không kết thúc với tình trạng thành công (nhưng in no changes added to commit (use "git add" and/or "git commit -a") thay thế).

Các vấn đề liên quan