개인 (한 사람) 프로젝트를위한 자식. 지나침?


84

나는 Subversion과 git의 두 가지 버전 제어 시스템을 알고 사용합니다. Subversion은 현재 유일한 개발자 인 개인 프로젝트에 사용되고 git은 오픈 소스 프로젝트 및 다른 사람들도 프로젝트에서 작업 할 것이라고 생각하는 프로젝트에 사용됩니다. 이것은 대부분 git의 놀라운 포크 및 병합 기능 때문입니다. 모든 사람이 자신의 브랜치에서 작업 할 수 있습니다. 매우 편리합니다.

이제는 git이 이해가 안되는 것처럼 Subversion을 개인 프로젝트에 사용합니다. 약간 과잉 인 것 같습니다. 내가 유일한 개발자 일 때 중앙 집중식 (일반적으로 내 홈 서버)이라면 괜찮습니다. 어쨌든 정기적으로 백업합니다. 내 지점을 만들 수있는 능력이 필요하지 않습니다. 주요 지점 내 지점입니다. 예, SVN은 분기에 대한 간단한 지원을 제공하지만 훨씬 강력한 지원은 의미가 없습니다. 병합하는 것은 고통 스럽거나 적어도 내 작은 경험으로 고통받을 수 있습니다.

개인 프로젝트에서 git을 사용해야하는 이유가 있습니까? 아니면 단순히 과잉입니까?


61
아니요, 개인 프로젝트에는 git 및 hg를 사용합니다. 로컬 개정 관리는 신의 선물입니다.
wkl

7
Git은 많은 수의 기여자가 있는지 여부에 관계없이 모든 프로젝트에서 더 나은 방법을 제공합니다 .git은 svn보다 훨씬 효율적으로 많은 것을 압축하고 (그리고 수십 배 더 빠릅니다!), git은 백업을 사소하게 만들고 git은 그렇지 않습니다. 다른 사람이 기여하고 싶다면 장애물이 되십시오.
Artefact2

4
나는 버전 제어를 사용하여 코드를 github 또는 bitbucket으로 푸시합니다. 서버는 백업용으로 사용되며 언젠가는 사람들이 실제로 관심을 가질만한 내용을 실제로 작성할 것입니다.
Mahmoud Hossam

8
"내 지점을 만들 수있는 능력이 필요하지 않습니다. 주요 지점은 내 지점입니다." 많은 사람들 undo이 응용 프로그램에서 비교적 새로운 기능이었을 때도 같은 말 을했습니다. 이제 모든 사람들은 모든 것이 필요하다는 것을 알고 있습니다. 당신은 분기해야합니다, 당신은 그것을 모른다.
Dan Rosenstark

1
@ rtperson 네, 그렇게 할 수는 있지만 비트 버킷보다 github을 더 좋아하더라도 실제로 수은을 더 좋아합니다.
Mahmoud Hossam

답변:


155

과잉이 아닙니다. 개인 프로젝트에 Git 및 Mercurial over Subversion을 사용하기 시작한 주된 이유는 리포지토리 시작이 훨씬 쉽다는 것입니다.

새로운 프로젝트를 시작하고 싶습니까?

> git init

밤! 하위 버전 저장소로 분기 및 태그를 지원하기 위해 저장소 서버를 설정하거나 폴더 구조를 체크인 할 필요가 없습니다.

나중에 프로젝트를 공유하는 것은 단지 git push원격 저장소가 아닌 다른 문제 일뿐 입니다. 서브 버전으로 빨리 해보십시오!


24
받아 들였습니다. 나는 git이 overkill보다 더 잘못되었다는 것을 증명할 수 없었다.)
Anto

7
Steve341 : 일반적으로 모든 소스 코드 프로젝트를 "projects"라는 폴더에 보관합니다. 여기서 각 소스 코드 프로젝트마다 하나씩 모든 리포지토리를 유지합니다. 하나의 동일한 VCS 리포지토리에서 여러 프로젝트를 함께 추적 할 필요가 없었습니다. 그것이 Ivy 나 Maven과 같은 의존성 관리 시스템입니다.
Spoike

3
@ Steve341 어떻게이 물건을 추적하기가 어렵습니까? 모든 repos를 포함하는 하나의 폴더 만 있습니다. git을 사용할 때 시스템이 매우 나쁜 습관이라는 사실을 제외하고는 시스템과 다르지 않습니다.
대안

2
@ Steve314 :echo 'for dir in projects/*; do cd "$dir"; git push; cd ..; done' > update_all; chmod +x update_all
André Paramés

2
git init그리고 bam! 아 맞다. 그리고 cp ../the-other-project/.gitignore .초기 커밋 전에. 밤!
Dan Rosenstark

46

로컬 개인 프로젝트에 Subversion을 사용하는 것은 과잉이지만 Git은 그렇지 않다고 주장합니다. Git은 SVN의 비효율적 인 "개정"개념과 Git의 객체 스냅 샷으로 인해 공간을 덜 차지하고, 설정이 덜 필요 git init하고 (수십 개의 svnadmin명령 및 권한 설정 등) 백업이 더 쉽습니다 ( git clone --bare또는 git push originGithub를 사용하는 경우) 또는 유사]) 완료되었으며 코드 관리를위한 더 나은 도구가 있습니다 (분기는 무료이며 병합이 더 쉽고 깨끗합니다). 다른 사람이 귀하의 저장소 복제본을 가지고 있지 않다고해서 DVCS의 이점이 "과잉"이라는 의미는 아닙니다.

또한 Git의 브랜칭 지원은 SVN보다 덜 복잡하며 더 큰 보상이 있다고 말합니다.


"복잡한"대신 "강력한"을 사용해야했을 것 같습니다
Anto

3
@Anto : 상관 없습니다. 나는 여전히 기본적으로 똑같은 것을 말할 것입니다 : Git의 우수한 분기에는 SVN에 비해 단점이 없습니다.
greyfade

3
Git은 소스 디렉토리를 모든 하위 디렉토리에있는 추적 파일로 "폴링"하지도 않습니다.
WarrenT

4
@WarrenT 소스 트리 "오염"은 svn 버전 1.7 이상에서 발생하지 않습니다.
pllee September

4
Subversion에서 파일 시스템 리포지토리를 만드는 것은 하나의 명령 ( svnadmin create및 초기 체크 아웃 또는 가져 오기를 수행하는 명령 )이며 권한을 설정할 필요가 없습니다. 나는 Git이 더 좋은 도구라는 것을 부정하지는 않지만 Subversion에 대한 부정확성은 도움이되지 않습니다.
Josh Kelley

34

결코 자신의 코드를 분기하지 않을 것이라고 생각하는 것은 조금 근시안적입니다. 나는 내 자신의 코드를 여러 번 분기했다. 특히 새로운 접근법을 실험 할 때 나는 아직 완전히 확신하지 못했다. 결국에는 기능이 필요합니다.

이것은 오랜 시간 Subversion 사용자로부터 온 것입니다. 하나의 도구로 통합하면 삶을 더 쉽게 만들 수 있습니다.


2
예, 이것이 지점, 실험의 요점이라고 생각합니다. Op의 질문을 읽을 때 처음으로 예약되었습니다. 리포지토리에서 분기하지 않는 경우 머리가 "분기"되고 버전 제어가 설정되어 있으면 의미가 없습니다.
Chris

3
서브 버전으로 분기 할 수 있습니다. 그리고 합치십시오. 일종의. 실제로, 내가 시도한 유일한 시간은 더 이상 작업 할 수없는 손상된 저장소로 끝나고 백업 (복구가 이미 적용된 상태)에서 복구하는 것이 도움이되지 않아서 내 모든 기록을 잃어 버렸습니다. 새로운 저장소를 시작하는 중이지만 1.4에서 전환 한 것에 대해 비난했습니다.? ~ 1.5 (나는 몇 년 전이라고 생각합니다). 아마도 브랜치 및 병합 작업 일 것입니다. 당신이 그것을 시도하기에 충분히 용감하다면. svn dump에 대해 알고 있다면 당연히 노력으로 문제를 해결할 수있었습니다.
Steve314

@Chris, 나는 언제든지 되돌아 갈 수있는 작동 버전을 원합니다. 물론 태그를 사용하여이를 달성 할 수 있지만 지점이 완벽한 의미를 갖는 경우가 있습니다. 자식 / 머큐리얼의 다른 이점도 잊지 마십시오.
Berin Loritsch

9

오버 킬은 "솔루션"으로 인한 부수적 인 손상이있을 때 예약됩니다. 총을 사용하여 비행을 죽이면 총알이 다른 곳으로 이동하여 손상이 발생합니다. 과잉입니다. 문제를 일으키지 않는 필요 이상으로 강력한 것을 사용하는 것은 과도하지 않으며 개발 프로세스를 간소화하는 데 도움이되는 경우 좋은 일이 될 수 있습니다. 해를 끼치 지 않으며 두 개의 소프트웨어 대신 두 개의 소프트웨어 만 업데이트하면됩니다. 그렇다면 왜 하나의 시스템 대신 두 개의 시스템이 필요합니까?


시스템이 방해를 받으면 과잉이 될 수 있습니다. 개인 프로젝트에 git을 사용하는 것이 좋은지 궁금합니다. 구체적인 장점 이 무엇인지 말씀해 주 시겠습니까? 이 답변은 그것을 다루지 않습니다. 나는 git을보다 강력한 시스템으로 생각하고 개인 프로젝트에는 너무 강력하다고 생각합니다. 그래도 방해가되지 않는 한 반드시 피해를 입을 필요는 없습니다. 답을 넓힐 수 있습니까?
Anto

1
오버 킬은 솔루션 적용 노력이 비례하지 않을 때에도 사용됩니다. 지역 프로젝트에 이미 서브 버전을 사용하고 있다면 Git이나 과도한 것을 배우기위한 노력이 필요했을 것입니다. 또는 물론 양도 가능한 기술을 개발하는 유용한 교훈. 개인적으로, 나는 여전히 subversion을 사용합니다. 나는 Git을 배우는 데 관심이 있지만, 내가 찾아 갈 때마다 내가 찾은 튜토리얼은 암호가 아니거나 Windows를위한 안정적인 도구를 얻지 못했거나 다른 장애물이있어 과도하게 보입니다.
Steve314

7

나는 한 사람의 프로젝트에 Git을 사용하고 그것을 좋아합니다. 나는 이전에 Subversion을 사용하고 있었지만 아직 Git 사용의 단점을 보지 못했습니다. 더 강력하지만 단순한 것을 더 복잡하게 만드는 방식은 아닙니다. 간단한 것들을 불필요하게 복잡하게하거나 비싸고 느리게 만드는 것 IMHO는 과도한 것을 호출하는 데 필요한 조건입니다. 또한 Github에서 이전에 다른 사람의 한 사람 프로젝트를 포크하여 원하는 기능을 추가 한 다음 풀 요청을 보냈습니다. 내 프로젝트에 관심이있는 사람이 같은 일을했다면 꽤 멋지다.


7

나는 결코 DVCS 전에 개인 프로젝트에 소스 제어를 사용하지 않는, 그래서 누군가 반대보기를 복용 상상하기 좀 이상해. 내 이유 중 일부는 다음과 같습니다.

  • 설치 및 분해가 쉽습니다. 예를 들어, 동료가 지난 주에 몇 가지 작은 단계로 해결 한 프로그래밍 퍼즐을주었습니다. 나는 45 분 동안 작업을 유지하는 git repo를 만들었고 사라졌습니다. 나는 그런 식으로 서브 버전이 얼마나 쉬운 지 모르겠지만, 아무도 그것을들은 적이 없다.
  • 연결이 끊어졌습니다. 저에게는 오프라인으로 일할 수 있다는 것이 일을하는 것보다 취미 프로젝트에 훨씬 더 도움이됩니다. 집 방화벽에 구멍을 뚫거나 프로젝트를 공개적으로 호스팅 할 필요가 없습니다. 썸 드라이브 나 랩톱에 임시로 저장소를 배치하고 모든 것을 동기화 상태로 유지할 수 있습니다.
  • 모든 것이 배치되었습니다. 리포지토리와 작업 트리를 함께 사용하면 OS 업그레이드와 같은 작업 중에 소규모 프로젝트를 쉽게 추적 할 수 있습니다.
  • 강력한 기능. 물론, 나는 항상 힘이 필요하지 않지만, 필요할 때 거기에 있고, 필요 없을 때 어떤 자원도 소비하지 않습니다.

6

나는 git-bisect입력에 따라 커밋을 앞뒤로 탐색하여 주어진 행동을 소개 한 정확한 커밋을 찾는 것이 정말 좋다고 들었습니다 .

당신은 것입니다 무슨 일이 있었는지 것들에 대한 어떤 일이 단순히 알아낼 수 없습니다 그렇게해야합니다.


편집 : 또한 고객이 사용하는 이전 버전에서 버그 수정을 수행해야 할 때 분기 기능이 매우 중요합니다. 당신은 "이 작은 것을 고치지 만 지금은 다시 한번 테스트하고 싶지 않기 때문에 최신 버전을 원하지 않습니다"를 관리 할 수 ​​있어야합니다.


2

자신의 코드 버전을 얼마나 심각하게 만들고 싶은지에 달려 있습니다. 예를 들어 현재 버전을 보유한 단순한 라이브러리 (또는 그것이 사실 인 한) 인 경우 개인적으로 Dropbox와 같은 기본 백업 옵션을 사용합니다. 모든 코드를 잃어 버린 경우 웹에서 복구 할 수 있으며 Dropbox는 실제로 어리석은 일을하면 30 일 버전 백업을합니다.

그러나 예를 들어 Production 및 Dev 분기를 유지 관리 해야하는 경우 git은 절대적으로 훌륭한 도구이며 svn보다 훨씬 빠릅니다. 그러나 데이터를 로컬로만 저장하면 하드 드라이브 오류 위험을 염두에 두십시오.


1
예, 개인 프로젝트에 DropBox를 사용합니다. 버전 관리는 어디에도 진정한 VCS처럼 복잡하지하지만 난 내 자유 시간에 할 작은 프로젝트를위한 좋은, 그리고 전혀이 더 관심을 필요로하지 않습니다 (당신이 그들에 작업 할 때 바로 업데이트 파일, 예를 들어 어떤 커밋..)
jhocking

그리고 우연히도 게임을 개발하기 때문에 프로젝트에는 이진 파일 (이미지 파일, 오디오 클립 등)이 많은 경향이 있으며 대부분의 버전 제어 시스템은 실제로 소스 코드 전용입니다.
jhocking

Git은 바이너리 파일과 잘 작동하지만 diff는 덜 흥미 롭습니다. 운좋게도 git에서의 diffing은 정확히 잠겨 있지는 않습니다. 좋아하는 바이너리 diff 도구를 찾으면 git과 함께 쉽게 사용할 수 있습니다 (명령 줄에서)
Chris Moschini

나는 Git이 많은 버전의 바이너리 파일을 낭비한다고 들었지만, 내가 들었던 내용이 틀릴 수도있다. 기본적으로, 나는 대부분의 이진 자산 (모든 이진 파일이 아니라 게임에 들어가는 이미지와 사운드가 모든 버전을 완전히 다시 저장해야한다고 가정) 때문에 Git은 하드 드라이브를 로컬 저장소로 채 웁니다.
jhocking

바이너리 파일을 버전 화하지 않으려는 경우에만 낭비입니다. 버전을 수정해야 할 경우 버전 기록이 낭비되지 않습니다. 바이너리를 추적 할 때 git이 버전 기록을 실수로 암시한다고 생각합니다. 정확하지 않습니다. git.wiki.kernel.org/index.php/GitSvnComparsion
크리스 모 스키니

2

항상 모든 종류의 개발 프로젝트에 항상 버전 관리 시스템을 사용하고 싶습니다 . 크든 작든 상관 없습니다. 집에서 어떤 종류의 새로운 기술을 사용하든, 작은 도우미를 작성하여 내 인생을 편하게하거나 대규모 분산 팀에서 전문적으로 개발하든 항상 버전 관리 시스템이 나를 백업 해주기를 원합니다.

물론 소규모 개인 프로젝트의 경우 대부분의 기능을 사용하지 않지만 git 리포지토리 (또는 로컬 Subversion 리포지토리)를 설정하는 것은 큰 문제가 아니므로 계속하십시오! 그리고 당신이 그것을 알기 전에 당신은 "지난 금요일에 파일 X의 내용은 무엇입니까?"를 알고 싶을 것입니다. 버전 관리가 없으면-행운을 빕니다 ;-)

따라서 git 또는 SVN을 사용하면 실제로 중요하지 않습니다. 개인적으로 SVN에서 git으로 점점 더 많은 것을 마이그레이션하기 시작하지만 가장 중요한 것은 버전 제어를 사용하는 것입니다.


1

개인 프로젝트의 경우 darcs가 실제로 훌륭하고 간단한 버전 제어를 수행하는 git보다 덜 관여합니다. 더 큰 프로젝트에는 빠르지 않지만 Subversion도 아닙니다!


1
그것은 당신이 darcs를 얼마나 잘 알고 있는지와 관련이 있습니다. 나는 그것을 사용하지 않았지만 git을 많이 사용했습니다. 나에게 git은 매우 직설적이지만 darcs를 사용한다면 머리를 긁을 것입니다.
Sam

1
git의 미친 UI를 이미 마스터했다면 darcs는 cakewalk가 될 것입니다.
wlangstroth

1
왜 darcs가 작은 프로젝트보다 낫지 설명 할 수 있습니까?
shabunc

0

우리가하는 일이 실험이라는 것을 이해하는 것은 강력한 정신적 패러다임 전환 일 수 있습니다. 이를 지원할 수있는 저렴하고 쉬운 도구를 갖추면 나아갈 때 실험에서 벗어날 수있는 능력이 향상되므로 앞으로 나아갈 수있는 능력이 향상됩니다.

많은 개발자들이 말합니다. 글쎄, 난 단지 내 코드의 사본을 만듭니다. 그러나 이러한 사본은 관리하기가 어려워지고 혼란을 초래합니다. 사본이 여러 개인데 어떤 사본을 기억할 수 없는지 언제 삭제해도 안전한지 알아 봅니다.

실험이 여러 파일에서 조정 된 변경을 수반 할 때이 모든 것이 훨씬 더 가치가 있습니다. 그리고 그것이 Git을 사용하는 솔로 pfoject 일 때 더욱 단순 해집니다.

솔로 프로젝트에서 사용해야하는지 궁금해하는 대신, 나는 이것을 빨리 발견하지 못한 부끄러움을 생각합니다.


이에 대한 디자이너의 견해를 보려면 YouTube 에서 Git의 Linus를 시청하십시오 (약 70 분)
WarrenT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.