2012-08-23 26 views
10

Tôi đang chạy kho lưu trữ git trên máy chủ từ xa. Tôi có nó thiết lập một chia sẻ samba trên máy chủ từ xa vì vậy tôi có thể lưu mã của tôi ở đó thay vì trên máy tính Windows 7 địa phương của tôi. Chúng tôi đang cố gắng xem xét sử dụng git, vì svn đã quá chậm và không đáng tin cậy. Vấn đề mà chúng tôi đang gặp phải với git là thực hiện bất kỳ cam kết/nhân bản nào/kéo vào phần samba chạy siêu siêu chậm. Nếu tôi làm một cam kết/clone/kéo vào một địa phương dir trên cửa sổ của tôi 7 máy nó hoạt động tuyệt vời, nhưng chúng tôi cần mã để được trên máy chủ từ xa. Bất kỳ ý tưởng? Tôi thực sự có thể sử dụng nó.Git đang thực hiện cam kết rất chậm trên một phần của Samba. Tôi có thể làm gì để tăng tốc nó?

Chỉnh sửa:

Tôi cũng nên đề cập rằng tôi đã chạy git gc - hung hăng và nó đã không tăng tốc.

+0

Bạn có chạy lệnh git trên máy chủ và repo đang ở trên ổ đĩa của máy chủ không? Hoặc bạn chạy lệnh cục bộ, nhưng repo là trên ổ đĩa của máy chủ chia sẻ? Bạn nên làm đầu tiên. – kan

+0

Tôi chạy lệnh git trên máy cục bộ, điều chỉnh mã trên phần samba, chia sẻ samba được lưu trữ trên máy chủ phát triển web để chúng tôi có thể xem mã của chúng tôi hoạt động như thế nào. Mỗi nhà phát triển có thư mục riêng của họ trên chia sẻ. Chúng tôi đẩy các thay đổi của chúng tôi đến một máy chủ từ xa, nơi chúng tôi lưu trữ repo của chúng tôi. –

+2

Có, đó là cách sai để làm điều đó. Có thể bạn có thể làm ngược lại - có repo cục bộ, nhưng máy chủ web sẽ sử dụng thư mục chia sẻ của máy tính của dev. Nếu không, bạn sẽ có các vấn đề về hiệu suất khác, ví dụ: find-in-files hoạt động nhanh hơn nhiều trên ổ đĩa cục bộ hơn là chia sẻ. – kan

Trả lời

2

Git không có nghĩa là được sử dụng trong cấu hình này. Nó giống như nhận được một Công thức 1 và có nó chạy đua trên một con đường đất.

Git là điều khiển phiên bản DVCS hoặc được phân phối. Nói cách khác, mọi nhà phát triển đều nhận được bản sao.

Những gì bạn cần để làm thiết lập là một kho git máy chủ trên mà máy samba và truy cập vào repo qua http hoặc ssh

Bạn có thể sử dụng các dự án như GitBlit hoặc thậm chí tốt hơn một tài khoản trên Github

+2

Chúng ta cần chạy nó từ xa vì một máy chủ web của nó. Máy cá nhân của chúng tôi không phải là máy chủ web. –

+1

Tôi không hiểu. chỉ máy chủ git cần được bật web. khách hàng sử dụng http/ssh để truy cập nó –

+1

Mỗi nhà phát triển cá nhân sẽ có bản sao của repo. Họ lưu trữ bản sao đó trên máy chủ web để họ có thể kiểm tra mã của họ trước khi họ đẩy nó vào tất cả các nhà phát triển khác. Tất cả chúng ta đều sử dụng cổ phiếu Samba để truy cập mã của chúng tôi trên các máy địa phương của chúng tôi. Tôi đã thiết lập một kho lưu trữ từ xa không có trên máy chủ web, nhưng chỉ có duy nhất để giữ mã. –

3

tôi có cùng một vấn đề với hiệu suất của Git qua chia sẻ SMB. Rất tiếc, tôi không thể chạy mã phát triển trên máy cục bộ của mình, vì vậy tôi sử dụng SMB để gắn thư mục từ xa và chỉnh sửa tệp nguồn bằng trình soạn thảo văn bản thích hợp trên máy cục bộ của tôi.

Vì tôi muốn một số tiện nghi khi cam kết với kho lưu trữ, tôi thích một trình khách GUI chạy trên máy cục bộ của tôi. Tuy nhiên, với các vấn đề về hiệu suất đã đề cập, điều này hơi phức tạp và mất rất nhiều thời gian.

Tuy nhiên: Tôi đã tìm thấy một giải pháp nhỏ gọn. Trước khi cam kết bất cứ điều gì để kho, tôi kéo một bản sao của các nguồn từ xa vào ổ cứng của tôi địa phương sử dụng rsync, như thế này:

rsync -az --progress --exclude ".git" [email protected]:/home/myapp/sourcecode /Devel/portal-mirror 

Bằng cách đó phải mất ít hơn một giây để làm một đầy đủ 1-to-1 đồng bộ hóa trạng thái từ xa (ràng buộc điều này với lối tắt bàn phím trong ứng dụng Git của tôi) trước khi thực hiện các khác biệt và cam kết. Làm việc như một say mê. Sau khi cam kết và đẩy vào kho lưu trữ, tôi chỉ cần git reset --hardgit pull trên máy chủ dev để đồng bộ hóa các thay đổi trở lại.

2

Chúng tôi đang chạy cùng cấu hình với git và samba kết hợp với php-storm. Nó chạy khá tốt. Chỉ khi tôi cố gắng sử dụng "SourceTree" trên dự án khổng lồ của chúng tôi, nó phải mất độ tuổi để làm mới, bởi vì (tôi nghĩ) git scanns mỗi và mỗi tập tin duy nhất để làm như vậy.

Một điều tôi đã cố gắng, và tôi đã nhận cải tiến hiệu suất nhỏ ra khỏi nó, là để điều chỉnh các máy chủ samba một chút:

Config File:

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536 

Tìm thấy dòng đó khi tìm kiếm samba tăng tôc.

Một giải pháp khác có thể là đồng bộ 1 trên 1 đồng bộ chạy mọi lúc trong loại nền thay thế samba. Có lẽ rsync có thể được sửa đổi một chút để làm như vậy.

0

Bạn có thể xem xét đảo ngược mô hình một chút và có máy chủ web gắn kết các chia sẻ trên máy của nhà phát triển. Bằng cách đó tất cả các nhân bản/cam kết/mã hóa được thực hiện tại địa phương, nhưng mỗi trang web của nhà phát triển chỉ đơn giản là lưu trữ trên một phần.

Hiện tại, tôi cho rằng máy chủ web của bạn đang hiển thị từng thư mục gốc của trang web dưới dạng phần samba. Sau đó, nhà phát triển sẽ gắn kết chia sẻ đó trên máy cục bộ của mình, sao chép một số kho lưu trữ và hoạt động ra khỏi phần chia sẻ. Hiệu năng trong trường hợp đó sẽ kém hiệu quả nhất và bạn cũng có thể gặp phải các vấn đề với các yêu cầu khóa phạm vi byte (BRL) và như vậy.

Thay vào đó, một tùy chọn là sao chép trực tiếp vào một thư mục trên mỗi máy tính của nhà phát triển và chia sẻ thư mục đó. Máy chủ web sau đó gắn kết chia sẻ đó.

Tất nhiên, lý tưởng là mỗi nhà phát triển sẽ chạy cá thể máy chủ web của riêng mình, nhưng nếu tôi đọc đúng câu hỏi thì đó không phải là một tùy chọn trong trường hợp này.