2013-07-13 25 views
5

Tôi đang làm việc trên một dự án nguồn mở. Bây giờ tôi đã hoàn thành một vài bản vá có liên quan đến công việc kinh doanh của công ty và tôi không thể đẩy các bản vá này lên thượng lưu.Làm thế nào để quản lý các dự án nguồn mở các bản vá lỗi mà không thể đẩy lên thượng lưu?

Vì vậy, tôi phải giữ các bản vá này trên kho lưu trữ git cục bộ của mình. Tôi phải kéo các bản vá mới từ thượng lưu và giải quyết các xung đột với các bản vá lỗi của mình.

Bất kỳ ai cũng có trải nghiệm tương tự của tôi và cách làm việc với nó một cách thoải mái?

Cập nhật: Cũng giống như nếu tôi có một số bản vá không thể được chấp nhận bởi Linux Kernel vì các bản vá này không thân thiện với hạt nhân. Tôi phải làm việc xây dựng hạt nhân hàng ngày và tôi không muốn gõ bằng tay hàng ngày. Có tồn tại bất kỳ công cụ nào để giúp tôi không?

+0

Tại sao bạn không thể đẩy? bạn có mô tả lỗi hay gì đó không? –

+0

Dự án có trên GitHub không? –

+0

Nếu dự án là nguồn mở, bạn có thể cho chúng tôi biết dự án đó là gì không? Có lẽ chúng ta có thể tìm ra cách mà dự án cụ thể đó muốn xử lý các đệ trình. –

Trả lời

1

Thứ nhất trước khi thực hiện thay đổi đối với dự án-

1. create a branch 
    2. Change to that branch for any changes you make 
    3. To pull the new patches from the upstream revert back to the master branch and then git pull. 

Các lệnh để tạo ra các chi nhánh và thay đổi như sau

1. $ git branch <branch name>   // To create a new branch 
2. $ git checkout <branch name>   // To change to the branch 
3. $ git checkout master    // To change to the master branch 
+0

Có tồn tại bất kỳ hệ thống quản lý nào để xử lý ? Cũng giống như nếu tôi có rất nhiều bản vá và một số dự án, nó sẽ là một điều tốn thời gian để giữ cho kho lưu trữ cục bộ của tôi được cập nhật. –

+0

Hiện tại tôi không sử dụng bất kỳ hệ thống quản lý nào. Nhưng như bạn đã đề cập đúng thì cần có nó. Tôi sẽ cập nhật một khi tôi tìm thấy một công cụ phù hợp giúp làm việc trên một số dự án –

-1

Tôi đang làm việc trên một dự án mã nguồn mở. Bây giờ tôi đã hoàn thành một vài bản vá có liên quan đến công việc kinh doanh của công ty và tôi không thể đẩy các bản vá này lên thượng lưu.

Nếu bạn đang cộng tác trong một dự án trong Git, đặc biệt nếu nó là nguồn mở, mọi người có thể sẽ không cho phép bạn đẩy bất cứ thứ gì bạn muốn vào kho lưu trữ ngược dòng. Bạn có thể muốn gửi các thay đổi của mình trong yêu cầu kéo hoặc gửi các bản vá lỗi đến một trong những người quản lý dự án.

Bạn có thể đọc thêm về cộng tác với những người khác trong Git từ những Pro Git chương:

  1. Distributed Workflows
  2. Contributing to a Project

Nếu bạn quan tâm, bạn cũng có thể đọc về how GitHub uses pull requests.

4

Tôi hơi ngạc nhiên khi câu trả lời cho đến nay dường như không đưa vào tài khoản hai điều:

  1. Không phải tất cả những thay đổi được thực hiện bởi các lập trình viên được thiết kế cho phù hợp hoặc để trình một dự án mã nguồn mở.
  2. Ngay cả khi có, nếu có bản cập nhật cho kho lưu trữ trong khi bạn làm việc trên mã của mình, bạn rất thường muốn hợp nhất các thay đổi đó vào bản sao làm việc của mình.

Điều tốt là vì bạn đang làm việc với phần mềm kiểm soát phiên bản khá thường không khó để thực hiện những gì bạn cần. Tôi là một anh chàng lật đổ (do chính sách của công ty) vì vậy tôi không biết cụ thể về GIT nhưng sau khi đọc this wiki article, có vẻ như khá nhiều thỏa thuận tương tự. Bạn không cần phải áp dụng các bản vá lỗi một lần nữa miễn là bạn phù hợp với các tập tin trong kho lưu trữ địa phương của bạn. Bạn có thể cập nhật bản sao cục bộ với các bản vá đã được áp dụng!

Mã tùy chỉnh của bạn có thể chạm vào một phần rất nhỏ của mã kho. Có khả năng hầu hết các thay đổi trong kho lưu trữ sẽ không chạm vào cùng mã mà bạn đã chạm vào.Bạn sẽ chỉ cần sử dụng lệnh git pull để tải xuống tất cả mã được cập nhật. Khi các phần bạn đã chạm được thay đổi trên kho lưu trữ, git sẽ làm tốt nhất là hợp nhất các thay đổi đó. Lần duy nhất bạn phải chỉnh sửa các tập tin là git phát hiện một cuộc xung đột mà nó không thể giải quyết được. Bài báo tôi đã đề cập, trước đó nói về điều này.

Bạn có thể sử dụng trình soạn thảo văn bản yêu thích của mình nhưng thực sự khá thuận tiện khi sử dụng công cụ hợp nhất 3 chiều trong trường hợp này. Meld là một công cụ như vậy cho Linux nhưng tôi chắc chắn có nhiều công cụ trên mạng.

1

Đây là quy trình làm việc có thể có.

thiết lập ban đầu

git clone --origin 'upstream' http://example.com/project.git 
cd project 
git checkout master 
git checkout -b patched 
# make changes 
git add --all 
git commit -m 'internal patches' 

mới ngược dòng thay đổi

git checkout master 
git pull upstream 
git checkout patched 
git rebase master 

Tài liệu tham khảo:

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