Git, Mercurial 및 Bazaar의 상대적 강점과 약점은 무엇입니까? [닫은]
여기서 사람들은 Git, Mercurial 및 Bazaar의 상대적 강점과 약점으로 무엇을보고 있습니까?
SVN 및 Perforce와 같은 버전 제어 시스템과 서로를 고려할 때 어떤 문제를 고려해야합니까?
SVN에서 이러한 분산 버전 제어 시스템 중 하나로의 마이그레이션을 계획 할 때 고려해야 할 요소는 무엇입니까?
힘내는 매우 빠르며 확장 성이 뛰어나며 개념에 대해 매우 투명합니다. 이것의 단점은 학습 곡선이 비교적 가파르다는 것입니다. Win32 포트는 사용 가능하지만 일류 시민은 아닙니다. Git은 해시를 버전 번호로 사용자에게 노출합니다. 이를 통해 단일 해시가 항상 동일한 내용을 참조하므로 공격자가 탐지되지 않고 기록을 수정할 수는 없지만 사용자에게는 번거로울 수 있습니다. Git은 파일 내용을 파일간에 이동하더라도 파일 내용을 추적하는 고유 한 개념을 가지고 있으며 파일을 1 단계 개체로 보지만 디렉토리는 추적하지 않습니다. 자식의 또 다른 문제는 rebase 와 같은 많은 작업이 있다는 것입니다) 히스토리를 쉽게 수정할 수있게합니다 (해시에서 참조하는 컨텐츠는 절대 변경되지 않지만 해당 해시에 대한 참조는 손실 될 수 있음). 일부 순수 주의자 (자신 포함)는 그다지 좋아하지 않습니다.
Bazaar는 상당히 빠르며 (이력이 얕은 나무에서는 매우 빠르지 만 현재는 역사 길이에 따라 확장이 잘되지 않습니다), 기존 SCM (CVS, SVN 등)의 명령 줄 인터페이스에 익숙한 사용자에게는 쉽게 배울 수 있습니다. Win32는 개발 팀에 의해 일류 대상으로 간주됩니다. 다양한 구성 요소를위한 플러그 가능한 아키텍처를 가지고 있으며 스토리지 형식을 자주 대체합니다. 이를 통해 새로운 개념 (예 : 서로 다른 개념을 기반으로하는 개정 제어 시스템과의 통합 지원 향상)을 도입하고 성능을 향상시킬 수 있습니다. Bazaar 팀은 디렉토리 추적 및 이름 변경 지원 기능을 고려합니다. 전 세계적으로 고유 한 개정판 ID 식별자를 모든 개정판에 사용할 수 있지만 트리 로컬 개정판 (표준 개정판 번호, 수정을 식별하기 위해 콘텐츠 해시 대신 svn 또는 기타 더 일반적인 SCM에서 사용되는 것과 더 유사합니다. Bazaar는 "경량 체크 아웃"을 지원하며, 여기서 히스토리는 로컬 시스템으로 복사되지 않고 원격 서버에 기록되며 필요할 때 네트워크를 통해 자동으로 참조됩니다. 현재 이것은 DSCM에서 고유합니다.
둘 다 어떤 형태의 SVN 통합이 가능합니다. 그러나 bzr-svn은 git-svn보다 훨씬 더 성능이 뛰어납니다. 그 목적을 위해 도입 된 백엔드 형식 수정 때문입니다. [업데이트, 2014 년 기준 : 타사 상용 제품 SubGit은 SVN과 Git간에 양방향 인터페이스를 제공합니다.이 인터페이스는 bzr-svn과 충실하며 훨씬 더 세련됩니다. 나는 강력하게 예산 및 라이센스 제약이 허락 할 때] 자식-SVN의 이상 사용을 권장합니다.
나는 Mercurial을 광범위하게 사용하지 않았기 때문에 Git과 마찬가지로 개정을 위해 콘텐츠 해시 주소를 지정한다는 점을 제외하고는 자세히 언급 할 수 없습니다. 또한 Git과 마찬가지로 디렉토리를 일급 객체로 취급하지 않으며 빈 디렉토리를 저장할 수 없습니다. 그러나 Git을 제외한 다른 DSCM보다 빠르며 다른 경쟁사보다 IDE 통합 (특히 Eclipse)이 훨씬 뛰어납니다. 성능 특성 (Git의 성능보다 약간 뒤 떨어짐)과 뛰어난 크로스 플랫폼 및 IDE 지원을 고려할 때 Mercurial은 많은 수의 win32 중심 또는 IDE 바인딩 멤버를 가진 팀에게 매력적일 수 있습니다.
SVN에서 마이그레이션 할 때 고려해야 할 사항 중 하나는 SVN의 GUI 프론트 엔드와 IDE 통합이 분산 SCM의 것보다 훨씬 성숙하다는 것입니다. 또한 현재 SVN으로 커밋 전 스크립트 자동화를 많이 사용하는 경우 (즉, 커밋을 진행하기 전에 단위 테스트를 통과해야 함) 공유 분기에 대한 병합 요청을 자동화 하기 위해 PQM 과 유사한 도구를 사용하고 싶을 것입니다 .
SVK는 Subversion을 백업 저장소로 사용하는 DSCM이며 SVN 중심 도구와 매우 잘 통합됩니다. 그러나 다른 주요 DSCM (Darcs 포함)보다 성능 및 확장 성 특성이 크게 저하되므로 기록 기간이나 파일 수 측면에서 크게 성장할 수있는 프로젝트의 경우 피해야합니다.
[저자 정보 : 저는 Git과 Perforce를 업무용으로 사용하고 Bazaar를 개인 프로젝트와 내장형 라이브러리로 사용합니다. 고용주 조직의 다른 부분에서는 Mercurial을 많이 사용합니다. 이전에는 SVN을 중심으로 많은 자동화를 구축했습니다. 그 전에는 GNU Arch, BitKeeper, CVS 및 기타 경험이 있습니다. Git은 처음에는 상당히 과감했습니다. 사용자가 선택한 워크 플로우에 맞게 설계된 툴킷과는 달리 GNU Arch는 개념이 많은 환경 인 것처럼 느껴졌습니다.하지만 그 후로 매우 편안해졌습니다. 그것].
Ogre 3D 프로젝트의 Steve Streeting (2009/9/28) 은 Git, Mercurial 및 Bazaar를 훌륭하고 직접 비교할 수있는 주제에 대한 블로그 항목을 게시했습니다 .
결국 그는 분명한 승자가없는 3 명 모두에서 강점과 약점을 발견합니다. 플러스 측면에서, 그는 당신이 함께 갈 것을 결정하는 데 도움이되는 훌륭한 테이블을 제공합니다.
짧은 읽기이며 강력하게 권장합니다.
여기서 사람들은 Git, Mercurial 및 Bazaar의 상대적 강점과 약점으로 무엇을보고 있습니까?
내 생각에 힘내 힘은 깨끗한 기본 디자인과 매우 다양한 기능입니다. 또한 멀티 브랜치 리포지토리 및 브랜치 중심 워크 플로 관리에 대한 최상의 지원을 생각합니다. 매우 빠르며 저장소 크기가 작습니다.
유용한 기능이 있지만 익숙해 지려면 약간의 노력이 필요합니다. 여기에는 작업 영역과 저장소 데이터베이스 간의 가시적 중간 스테이징 영역 (인덱스)이 포함되어있어보다 복잡한 경우의 병합 해결, 증분 커밋 및 더티 트리 커밋; 유사한 종류의 파일 ID를 사용하여 추적하는 대신 유사 휴리스틱을 사용하여 이름을 바꾸거나 복사본을 감지 합니다. 이는 잘 작동하며 도매 이름 바꾸기뿐만 아니라 파일에서 코드 이동을 따를 수있는 비난 (주석)을 허용합니다.
단점 중 하나는 MS Windows 지원이 뒤쳐져 있고 전체가 아니라는 것입니다. 인식되는 또 다른 단점은 예를 들어 Mercurial과 같이 잘 문서화되어 있지 않으며 경쟁 제품보다 사용자 친화적이지 않지만 변경됩니다.
In my opinion Mercurial strength lies in its good performance and small repository size, in its good MS Windows support.
The main disadvanatge is in my opinion the fact that local branches (multiple branches in single repository) is still second-class citizen, and in strange and complicated way it implements tags. Also the way it deals with file renames was suboptimal (but this migth have changed). Mercurial doesn't support octopus merges (with more than two parents).
From what I have heard and read main Bazaar advantages are it easy support for centralized workflow (which is also disadvantage, with centralized concepts visible where it shouldn't), tracking renames of both files and directories.
Its main disadvantage are performance and repository size for large repositories with long nonlinear history (the performance improved at least for not too large repositories), the fact that default paradigm is one ranch per repository (you can set it up to share data, though), and centralized concepts (but that also from what I have heard changes).
Git is written in C, shell scripts and Perl, and is scriptable; Mercurial is written in C (core, for performance) and Python, and provides API for extensions; Bazaar is written in Python, and provides API for extensions.
In considering each of them with one another and against version control systems like SVN and Perforce, what issues should be considered?
Version control systems like Subversion (SVN), Perforce, or ClearCase are centralized version control systems. Git, Mercurial, Bazaar (and also Darcs, Monotone and BitKeeper) are distributed version control systems. Distributed version control systems allow for much wider range of workflows. They allow to use "publish when ready". They have better support for branching and merging, and for branch-heavy workflows. You don't need to trust people with commit access to be able to get contributions from them in an easy way.
In planning a migration from SVN to one of these distributed version control systems, what factors would you consider?
One of factors you might want to consider is the support for inetracting with SVN; Git has git-svn, Bazaar has bzr-svn, and Mercurial has hgsubversion extension.
Disclaimer: I am Git user and small time contributor, and watch (and participate on) git mailing list. I know Mercurial and Bazaar only from their documentation, various discussion on IRC and mailing lists, and blog posts and articles comparing various version control systems (some of which are listed on GitComparison page on Git Wiki).
InfoQ has a nice comparison.
Mercurial and Bazaar resemble themselves very much on the surface. They both provide basic distributed version control, as in offline commit and merging multiple branches, are both written in python and are both slower than git. There are many differences once you delve into the code, but, for your routine day-to-day tasks, they are effectively the same, although Mercurial seems to have a bit more momentum.
Git, well, is not for the uninitiated. It is much faster than both Mercurial and Bazaar, and was written to manage the Linux kernel. It is the fastest of the three and it is also the most powerful of the three, by quite a margin. Git's log and commit manipulation tools are unmatched. However, it is also the most complicated and the most dangerous to use. It is very easy to lose a commit or ruin a repository, especially if you do not understand the inner workings of git.
Take a look at the comparison made recently by the Python developers: http://wiki.python.org/moin/DvcsComparison. They chose Mercurial based on three important reasons:
The choice to go with Mercurial was made for three important reasons:
- According to a small survey, Python developers are more interested in using Mercurial than in Bazaar or Git.
- Mercurial is written in Python, which is congruent with the python-dev tendency to 'eat their own dogfood'.
- Mercurial is significantly faster than bzr (it's slower than git, though by a much smaller difference).
- Mercurial is easier to learn for SVN users than Bazaar.
Sun did an evaluation of git, Mercurial, and Bazaar as candidates to replace the Sun Teamware VCS for the Solaris code base. I found it very interesting.
A very important missing thing in bazaar is cp. You cannot have multiple files sharing the same history, as you have in SVN, see for example here and here. If you don't plan to use cp, bzr is a great (and very easy to use) replacement for svn.
I was using Bazaar for a while which I liked a lot but it was only smaller projects and even then it was pretty slow. So easy to learn, but not super fast. It is very x-platform though.
I currently use Git which I like a lot since version 1.6 made it much more similar to other VCS in terms of the commands to use.
I think the main differences for my experience in using DVCS is this:
- Git has the most vibrant community and it's common to see articles about Git
- GitHub really rocks. Launchpad.net is ok, but nothing like the pleasure of Github
- The number of workflow tools for Git has been great. It's integrated all over the place. There are some for Bzr but not nearly as many or as well maintained.
In summary Bzr was great when I was cutting my teeth on DVCS but I'm now very happy with Git and Github.
This is a big question that depends a lot on context that would take you a lot of time to type into one of these little text boxes. Also, all three of these appear substantially similar when used for the usual stuff most programmers do, so even understanding the differences requires some fairly esoteric knowledge.
You will probably get much better answers if you can break your analysis of these tools down to the point at which you have more specific questions.
Bazaar is IMHO easier to learn than git. Git has a nice support in github.com.
I think you should try to use both and decide which suits you most.
What do folks here see as the relative strengths and weaknesses of Git, Mercurial, and Bazaar?
This is a very open question, bordering on flamebait.
Git is fastest, but all three are fast enough. Bazaar is the most flexible (it has transparent read-write support for SVN repositories) and cares a lot about the user experience. Mercurial is somewhere in the middle.
All three systems have lots of fanboys. I am personally a Bazaar fanboy.
In considering each of them with one another and against version control systems like SVN and Perforce, what issues should be considered?
The former are distributed systems. The latter are centralized systems. In addition, Perforce is proprietary while all the others are free as in speech.
Centralized versus decentralized is a much more momentous choice than any of the systems you mentioned within its category.
In planning a migration from SVN to one of these distributed version control systems, what factors would you consider?
First, lack of a good substitute for TortoiseSVN. Although Bazaar is working on their own Tortoise variant, but it's not there yet, as of September 2008.
Then, training the key people about how using a decentralized system is going to affect their work.
Finally, integration with the rest of the system, such as issue trackers, the nightly build system, the automated test system, etc.
Your major issue is going to be that these are Distributed SCMs, and as such require a bit of a change to the user's mindset. Once people get used to the idea the technical details and usage patterns will fall into place, but don't underestimate that initial hurdle, especially in a corporate setting. Remember, all problems are people problems.
ddaa.myopenid.com mentioned it in passing, but I think it's worth mentioning again: Bazaar can read and write to remote SVN repositories. That means you could use Bazaar locally as a proof-of-concept while the rest of the team is still using Subversion.
EDIT: Pretty much all the tool now have some way of interacting with SVN, but I now have personal experience that git svn
works extremely well. I've been using it for months, with minimal hiccups.
There is good video by Linus Torvalds on git. He is creator of Git so this is what he promotes but in the video he explain what distributed SCMs are and why they are better then centralized ones. There is a good deal of comparing git (mercurial is considered to be OK) and cvs/svn/perforce. There are also questions from the audience regarding migration to distributed SCM.
I found this material enlightening and I am sold to distributed SCM. But despite Linus' efforts my choice is mercurial. The reason is bitbucket.org, I found it better (more generous) then github.
I need to say here a word of warning: Linus has quite aggressive style, I think he wants to be funny but I didn't laugh. Apart from that the video is great if you are new to distributed SCMs and think about move from SVN.
http://www.youtube.com/watch?v=4XpnKHJAok8
Distributed version control systems (DVCSs) solve different problems than Centralized VCSs. Comparing them is like comparing hammers and screwdrivers.
Centralized VCS systems are designed with the intent that there is One True Source that is Blessed, and therefore Good. All developers work (checkout) from that source, and then add (commit) their changes, which then become similarly Blessed. The only real difference between CVS, Subversion, ClearCase, Perforce, VisualSourceSafe and all the other CVCSes is in the workflow, performance, and integration that each product offers.
Distributed VCS systems are designed with the intent that one repository is as good as any other, and that merges from one repository to another are just another form of communication. Any semantic value as to which repository should be trusted is imposed from the outside by process, not by the software itself.
프로젝트 또는 조직이 중앙 집중식 제어를 원할 경우 DVCS는 스타터가 아닙니다. 개발자가 중앙 저장소에 대한 안전한 광대역 연결없이 국가 / 세계에서 일할 것으로 예상되는 경우 DVCS는 아마도 당신의 구원 일 것입니다. 둘 다 필요하다면 fsck'd입니다.
'Programing' 카테고리의 다른 글
현재 브랜치와 마스터 사이에 Git diff가 있지만 병합되지 않은 마스터 커밋은 포함되지 않습니다. (0) | 2020.06.24 |
---|---|
PyTorch에서 "보기"방법은 어떻게 작동합니까? (0) | 2020.06.24 |
현재 새 프로젝트의 JBoss 또는 Glassfish (또는 다른)를 Java EE 서버로 사용 하시겠습니까? (0) | 2020.06.24 |
왜 파이썬 (또는 불변 데이터 타입)에서 튜플이 필요한가? (0) | 2020.06.24 |
문자열 스트림, 문자열 및 char * 변환 혼동 (0) | 2020.06.24 |