비교를 살펴보면 기능 세트 사이에 1 : 1 매핑이있을 수 있습니다. 그러나 종종 인용되는 말은 "수은이 더 쉽다"는 것입니다. 이 진술의 근거는 무엇입니까? (만약에 어떠한)
비교를 살펴보면 기능 세트 사이에 1 : 1 매핑이있을 수 있습니다. 그러나 종종 인용되는 말은 "수은이 더 쉽다"는 것입니다. 이 진술의 근거는 무엇입니까? (만약에 어떠한)
답변:
적절한 예 : 모든 이전 커밋에서 사용자 이름을 변경한다고 가정 해 봅시다. 여러 가지 이유로이 작업을 여러 번 수행해야했습니다.
힘내 버전
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
머큐리 버전 :
authors.convert.list 파일 :
<oldname>=<newname>
명령 줄 :
hg convert --authors authors.convert.list SOURCE DEST
이제 어느 것이 더 사용하기 쉬운 것입니까?
참고 : 저는 Git과 함께 2 년 동안 일한 적이 있었기 때문에 "나는 그것을 싫어합니다. 2 초 안에 얻지 못했습니다."
나를 위해, 그것은 유용성입니다. Git은 리눅스 방식의 일을하는 리눅스 지향적입니다. 즉, 명령 줄, 매뉴얼 페이지 및 스스로 알아내는 것을 의미합니다. GUI가 매우 열악했습니다 (참고 : 약 1 년 전부터 msysGit을 기반으로하고 있습니다). 간신히 사용할 수있었습니다
명령 줄이 더 나빴습니다. Linux 지향 프로그램이기 때문에 Windows에서는 사용하기가 매우 어려웠습니다. 네이티브 포트 대신 git을 MinGW (Think cygwin)로 감싸서 작업하기가 훨씬 어려웠습니다. MinGW는 Windows 명령 프롬프트가 아니며 다르게 작동합니다. 이것이 Git과 함께하는 유일한 방법이라는 것은 미친 짓입니다. Linux에서도 직선 명령 행으로 작업하는 것이 유일한 방법 인 것 같습니다. RabbitVCS와 같은 프로젝트가 도움이되었지만 강력하지는 않았습니다.
커맨드 라인 중심의 접근 방식과 리눅스 프로그램은 거의 모든 하우투 가이드, 도움말 문서 및 포럼 / QA 질문이 위와 같은 괴물 명령을 실행하는 데 의존한다는 것을 의미했습니다. 기본적인 SCM 명령 (commit, pull, push)은 복잡하지 않지만 더 복잡 해짐에 따라 기하 급수적으로 증가합니다.
나는 또한 많은 OSS git 사용자가 Github 주위에 매달려있는 곳을 싫어합니다. 처음으로 github 페이지를 방문하면 가능한 모든 작업이 수행됩니다. 나에게 프로젝트 git 페이지 는 혼란스럽고 무섭고 지나치게 강력 해 보입니다. 프로젝트가 무엇인지에 대한 설명조차도 아래로 내려갑니다. Github은 이미 전체 웹 사이트가 설치되어 있지 않은 사람들을 해칩니다. 그것의 이슈 트래커 또한 끔찍하고 혼란 스럽다. 기능 과부하.
Git 사용자도 매우 컬트 한 것처럼 보였다. Git 사용자는 항상 DVCS가 더 나은 "거룩한 전쟁"을 시작한 것으로 보이며, 따라서 Mercurial 사용자는 자신을 방어해야합니다. http://whygitisbetterthanx.com/ 과 같은 사이트 는 오만함과 거의 "내 소프트웨어 사용 또는 죽어"정신을 보여줍니다. X를 알지 못하고, X를 미리 사용하거나, Windows를 사용하는 등 여러 가지 도움을 받기 위해 여러 번 도움을 받았습니다.
반면에 머큐리얼은 더 친절한 접근법을 향해 가고있는 것 같습니다. 그들의 홈페이지 는 Git 's 보다 새로운 사용자에게 훨씬 더 친근 해 보인다 . 간단한 Google 검색에서 5 번째 결과는 Mercurial에 매우 유용한 GUI 인 TortoiseHg입니다. 그들의 전체 접근 방식은 단순 해 보입니다.
Mercurial을 사용하면 SSH 넌센스가 없습니다 (SSH는 Windows에서는 지옥입니다). 머큐리얼은 잘 작동합니다.
TortoiseHg는 실제로 유용한 기능을 제공하는 실제로 사용 가능한 인터페이스를 제공합니다 (최근에는 점점 커지고 있음). 옵션은 필요한 것으로 제한되어있어 거의 사용되지 않는 혼란과 옵션을 제거합니다. 또한 많은 괜찮은 기본값을 제공합니다
신규 이민자들에게 매우 친숙한 Mercurial은 매우 쉽게 픽업 할 수있었습니다. 다른 브랜칭 모델 및 히스토리 편집과 같은 더 복잡한 주제조차도 매우 쉽게 따라갈 수있었습니다. 나는 머큐리얼을 빠르고 고통없이 집어 들었다.
Mercurial은 약간의 설정만으로도 처음으로 작동합니다. 모든 OS에서 TortoiseHg를 설치하고 다른 Guis를 찾지 않고도 원하는 모든 기능 (주로 컨텍스트 메뉴 명령)을 얻을 수 있습니다. 또한 SSH 설정이 누락되었습니다 (다른 가이드 중 절반은 Putty, Plink 및 Pagent를 사용하고 나머지 절반은 ssh-keygen을 사용한다고 말합니다). 신규 사용자의 경우 TortoiseHg를 설치하는 데 몇 분이 걸리고 Git은 많은 인터넷 검색을 통해 30 분에서 1 시간이 걸립니다.
마지막으로 온라인 저장소가 있습니다. Githubs에 해당하는 것은 BitBucket이며 위에서 설명한 몇 가지 문제가 있습니다. 그러나 Google 코드도 있습니다. Google 코드 프로젝트 로 이동 하면 기능 과부하가 발생하지 않으며 깔끔한 인터페이스가 제공됩니다. Google 코드는 온라인 리포지토리 / 웹 사이트 콤보로 기존 사이트 설정이없는 OSS 프로젝트에 실제로 도움이됩니다. 프로젝트 코드 웹 사이트로 Google 코드를 꽤 오랫동안 사용하는 것이 매우 편할 것입니다. 꼭 필요한 경우에만 웹 사이트를 구축하십시오. Github의 거의 쓸모없는 이슈 트래커와 Bugzilla의 괴물 사이에 잘 어울리는 이슈 트래커도 강력 합니다.
머큐리얼은 매번 처음으로 작동합니다. 힘내가 내 방식에 들어가서 내가 더 많이 사용할수록 분노합니다.
Mercurial은 일반적으로 Git보다 간단하고 배우기 쉽다고 생각됩니다. 결과적으로 Git이 더 유연하고 강력하다는 인식이 있습니다. 이는 부분적으로 Git이 더 낮은 수준의 명령을 제공하는 경향이 있지만 기본 Mercurial 은 고급 기능을 숨기고 사용자가 원하는 고급 기능을 활성화하기 위해 수은 구성 파일을 편집 할 수 있도록하기 때문입니다. 이것은 종종 Mercurial에서 고급 기능을 사용할 수 없다는 인식으로 이어집니다.
Mercurial은 항상 인터페이스 측면에 더 중점을 두어 원래 배우기가 더 쉬워졌습니다. Git과 비교하여 Mercurial을 유용한 방식으로 조작하려면 더 깊은 이해가 필요합니다. 장기적으로, 그러한 캡슐화 는 Mercurial에게 실제보다 덜 강력하고 기능적이라는 잘못된 외관을 제공했습니다.
hg push --branch BRANCH
) 또는 특정 개정 ( hg push --rev REV
) 까지 푸시 할 수 있습니다 . hg help push
더 많은 옵션을 참조하십시오 .
맥락 : 저는 매일 Mercurial (업무용)과 Git (부업 프로젝트 및 오픈 소스 용)을 사용합니다. 나는 주로 IDE가 아닌 텍스트 기반 도구를 사용하며 Mac에 있습니다.
일반적으로 Mercurial은 작업하기가 더 쉽습니다. 내가 찾은 몇 가지 사항은 Mercurial을 더 쉽게 만듭니다.
hg
에 해당 git
지점 실제로이라고합니다 bookmarks
. 내가 아는 한 hg
지점에는에 해당하는 것이 없습니다 git
.
git
분기는 분기의 하위 집합입니다 hg
. 에서 hg
당신이 가질 수있는 모두의 이름과 이름 (위상) 지점, 심지어 같은 방식으로 이름이 지점을 관리 할 수있는 git
책갈피를 사용하여. 스테이징 영역의 요점을 본 적이 없습니다. 원치 않는 변경 사항을 보류 한 다음 코드를 커밋하기 전에 코드를 컴파일하고 완료했는지 확인하십시오. 그런 다음 선반을 풀고 계속할 수 있습니다. 또한 Charles Bailey의 " Massaging Hunks
hg bookmark keyo-stuff
작업을 수행 hg commit
한 다음 결국에는 hg push -B keyo-stuff
. 개정 번호가 마음에 들지 않으면 사용하지 마십시오. Mercurial은 개정 번호를 수락 할 때마다 해시를 수락 할 것이라고 생각합니다. 말할 것도없이, Mercurial의 기능 부족으로 Mercurial을 강타한 여러분의 의견은 무지하고 공격적인 것으로 나타났습니다. Git 사용자의 고정 관념에 대해 많은 일을하지 않습니다!
이것은 매우 주관적이며 한 사람에서 다른 사람에게 달려 있지만 그렇습니다. VCS를 완전히 처음 접하는 사람이나 "구식"VCS 중 하나에서 온 사람에게 갈 것입니다. Mercurial은 더 쉬워 보일 것입니다.
예를 들어, 파일을 추가하고, Hg에 색인이 존재하지 않고, 가장 오래된 예로 일부 이전 개정으로 돌아가서 (업데이트 및 커밋하기 만하면 됨) 용이합니다. 이제 한 시스템의 대부분의 기능을 다른 시스템에서 에뮬레이션 할 수 있지만 그 반대의 경우도 있지만 Git에 대한 지식이 필요하지만 Mercurial에서는 기본값 (사용자가 호출 할 수있는 경우)이 "사용자 친화적"입니다. 그 작은 것들-여기 저기 스위치, 하나의 명령에서 명백한 행동 등 ...이 것들이 합쳐지고 결국 하나의 시스템이 다른 시스템보다 사용하기가 더 쉽습니다.
답을 완성시키기 위해; 나는 git을 사용하지만 "새로운 사용자"에게 VCS를 추천 할 때는 거의 항상 Mercurial을 추천한다. 처음 손에 들어 왔을 때 매우 직관적 인 느낌이 들었습니다. Mercurial이 Git보다 분당 wtf / 분이 적게 생성되는 것은 저의 경험입니다.
나는 이것이 간단하다고 생각합니다. Mercurial은보다 친숙한 구문을 가지고 있으며 (특히 SVN 사용자를 위해) 상당히 잘 문서화되어 있습니다. Git 구문에 익숙해지면 다른 것만 큼 쉽게 사용할 수 있습니다.
이에 대한 인식은 시간이 지남에 따라 변할 수 있습니다. Mercurial은 매우 잘 설계되어 있으며 Git도 마찬가지입니다. Mercurial은 배우기가 더 쉬워 보였고 (적어도 나에게는 그랬다), Git에서 나는 어려움을 겪었다. 나는 파이썬과 루비를 배우려고 노력했고 파이썬으로 더 빨라졌습니다. 그렇다고해서 파이썬이 루비보다 항상 어디서나 낫거나 심지어 나에게 더 낫다는 의미는 아닙니다. 그것은 내가 배우고 고집 한 것입니다. 프로그래머는 종종 개인적인 취향에서 거룩한 전쟁을합니다. 다른 인간들도 그렇게합니다.
나는 Git에 대해 열린 마음을 가지려고 노력하는 수은 사용자이며, Mercurial과 마찬가지로 "내가 가장 좋아하는 것"이 아니었다는 것을 자유롭게 인정한다. 나는 Git이 정말로 정말로 좋다고 생각한다.
GIT / 수은의 복잡성에 대한 반대 사례 : 멋진 GIT 지원은 Mac의 XCode에 내장되어 있습니다. GIT보다 Mercurial에서 XCode를 사용하기가 쉽지 않습니다.
지금까지 GIT에 대한 나의 경험은 혼란스럽고 길을 잃었고 문서를 사용하는 동안 더 많은 문서를 참조해야합니다. 나는 많은 문서가 작성되었다고 믿지만, 그것을 "파고들"수 있었던 것은 아무것도 없다. 둘째, Python에서 Mercurial을 쉽게 수정하고 확장 할 수 있으며 Python을 능숙하게 사용하면서 누구나 파이썬을 빨리 배울 수 있으므로 나에게 유리합니다. 또한 C를 알고 C로 파이썬 확장을 작성하므로 언젠가 필요하다면 C로 Git 확장을 쉽게 작성할 수 있다고 가정합니다.
사용 편의성은 정량화하기 쉬운 것이 아닙니다. 그것은 거기에 있으며, 그것이 완전히 주관적이라고 생각하지는 않지만, 우리는 좋은 객관적인 측정 기술을 가지고 있지 않습니다. 사용하기 쉬운 장치는 무엇입니까? 밀리 아이팟?
나는 100 % 프로 머큐리얼, 100 % 안티 깃이 될 정도로 당당하지 않습니다. 나는 현재 Mercurial, Windows 및 Linux에서 더 편안하고 더 많은 Mac 작업을 시작할 때 XCode + GIT를 고수 할 것으로 기대합니다.
업데이트 2013 : 나는 지금 내가이 망할 놈의 같은 가지고 있었으면 좋겠다 일부 기능을 찾을 의욕과 충분히 GIT를 사용하고 이 병합 전략에 대한 질문을. 실제로 힘내는 배우기 어려우면 놀랍고 때로는 복잡합니다.
IMO가 신규 사용자를 Git에서 제외시킬 수있는 몇 가지 사항이 있습니다.
Git 문화는 더 명령 중심적입니다. 두 도구가 명령 줄에 너무 집중하는 경향이 있지만 (여러 번 말했듯이 명령 줄 지침은 강력하고 유창하지만 좋은 마케팅 전략은 아닙니다 ) Git의 경우가 훨씬 낫습니다. Mercurial은 TortoiseHg에 사실상 표준 GUI 도구를 가지고 있지만 Mercurial 홈페이지의 Windows 사용자를위한 기본 다운로드 옵션이지만 Git은 경쟁이 치열한 GUI 프론트 엔드 (TortoiseGit, Git Extensions, gitk 등)를 가지고 있습니다. Git 웹 사이트에서 볼 수 있습니다. (빨간색 라벨에 검은 색 텍스트? C'mon, TortoiseGit, 그보다 더 잘할 수 있습니다!) Git 커뮤니티에는 GUI 도구를 사용하는 사람들이 적절한 소프트웨어 개발자가 아니라는 훨씬 더 널리 퍼진 태도가 있습니다.
Git은 고급 사용자에게는 완벽한 기본 설정을 제공하지만 새로운 사용자에게 위협이되지 않는 경우에는 놀라 울 것입니다. 예를 들어 병합과 같은 작업 자동화에 대해 훨씬 더 적극적입니다 (예를 들어, git pull은 자동으로 병합 및 가능한 경우 커밋). 완전 자동화 된 병합의 경우가 있지만, 경험이 부족한 사용자는 병합에 대한 두려움이 있으며, 소스 코드를 최대한 활용하기 전에 도구에 대한 신뢰를 얻을 수있는 기회가 주어져야합니다.
문서화 및 고유 한 복잡성 :
$ hg help log | wc -l
64
$ git help log | wc -l
912
내가 생각할 수있는 한 가지는
git add .
git commit -am "message"
vs.
hg ci -Am "message"
git commit -a
새로 만든 파일을 추가하지 않습니다. hg ci -A
즉, git와 함께 두 개의 명령이 필요한 작업은 Mercurial에서 하나의 명령으로 수행 할 수 있습니다. 다시 말해 "낮은 타이핑"이 반드시 "사용자 친화적"이라는 의미는 아닙니다.
git commit -a
주어진 커밋에 대해 추가되거나 추가되지 않는 것을 쉽게 제어 할 수 있기 때문에 단순히 작동 하는 방식을 선호 하게되었습니다. (실제로 svn ci
커밋에 관련없는 자료를 추가하는 것을 피하기 위해 모든 사람 에 대해 개별 경로 이름을 지정하는 것은 드문 일이 아닙니다 .)
hg ci
없으면에 해당 하는 것으로 생각합니다 . 나는 git을 hg보다 많이 사용했기 때문에 100 % 확실하지 않습니다. -A
git commit -a
hg ci
== 확인했습니다 git commit -a
.
이 때문에.
힘내는 수은보다 내장을 훨씬 더 많이 노출시킵니다. 수은을 수거 한 후 몇 분 안에 행복하게 수은을 사용할 수 있지만, 몇 달 동안 레슬링을 한 후에도 여전히 git은 여전히 어려움을 겪습니다. ). 나는 커맨드 라인과 대부분 리눅스에서 둘 다 사용하고 있으므로 이것은 커맨드 라인 인터페이스에 대한 혐오가 아닙니다.
간단한 예제 중 하나는 git에 비해 수은에 필요한 상대적으로 적은 플래그와 명령 줄 인수입니다. git의 스테이징 영역과 add 명령의 동작은 필요 이상으로 복잡성을 더합니다. 재설정, 체크 아웃 및 되돌리기의 트리오와 여러 순열은 엄청난 복잡성을 더해 주므로 수은에 대한 되돌리기 및 업데이트의 직접적인 특성을 볼 때 매우 불필요합니다.
Hginit 에 대한 위의 의견에도 동의합니다 . 수은을 이해하기가 훨씬 쉬워졌습니다. 잘 작성되었으며 이해하기 매우 쉽습니다. git 용으로 작성된 문서가 없습니다. 우선, Scott Chacone (git에 관한 대부분의 문서 / 책을 한 손으로 쓴 사람)이 특히 혼란 스럽습니다.