버전 관리를 사용하는 방법


19

localhost에서 PHP로 웹 사이트를 개발 중이며 모듈이 완성되면 친구들이 알파 테스트를 할 수 있도록 클라우드에 업로드합니다.

개발을 계속하면서 파일이 많고 편집하거나 변경 한 파일을 추적하지 못합니다. 모든 파일을 관리하는 '버전 제어'라는 말을 들었지만 작동 방식을 잘 모르겠습니다.

그래서 내 질문은 : 웹 사이트를 개발할 때 모든 편집 / 변경 / 새 파일을 추적하고 파일을 관리하는 쉬운 방법 / 서비스 / 응용 프로그램이 있습니까? 모듈을 완성하자마자 클라우드에 업로드하고 싶습니다 (Amazon Cloud Service를 사용하고 있습니다). 새 파일에 문제가 발생하면 이전 파일로 돌아가고 싶을 수 있습니다. 그리고 한두 번의 클릭으로, 내가 마지막으로 업로드 한 이후로 편집하거나 변경 한 파일을 볼 수 있습니까?


5
어떤 버전 제어 시스템을 사용해야하는지 정직하게 말하면 모든 "현재"수동 방식보다 낫습니다.
Johan

답변:


28

소프트웨어 구성 관리 있는, 버전 제어 당신이 확실히 시작할 수 있지만, 일부는 파일 변경을 추적하는 데보다 조금 더 복잡합니다. 그러나 Joel Spolky의 Mercurial 튜토리얼 과 함께 위에 링크 된 Wikipedia 기사를 읽으십시오 .

시작하려면 Mercurial, GIT 또는 Bazaar 중 하나를 순서대로 선택하고 IDE 및 운영 체제 용 도구와 함께 설치하십시오 (Eclipse 용 HGE를 사용하는 Mercurial을 선호합니다).

  1. 작업 디렉토리에서 저장소를 초기화하십시오 (예 : Mercurial에서 초기화 ).
  2. 추적 할 파일과 디렉토리를 결정하십시오. 일반적인 규칙은 컴파일러 및 기타 도구에서 생성 된 파일을 추적하지 않는 것입니다.
  3. 명령을 사용하여 파일 및 디렉토리를 저장소에 추가하십시오 ( hg add for Mercurial).
  4. 추적하지 않으려는 파일의 패턴에 대해 도구에 알리십시오 ( Mercurial의 경우 .hgignore 편집 ).
  5. 원래 버전 ( hg ci ) 을 추적하기 위해 커밋을 수행하십시오 .
  6. 작은 논리적 마일스톤이라도 각 논리적 마일스톤 후에 커밋을 수행합니다.
  7. 새 파일을 만들 때 추가하십시오.
  8. 마지막 두 개를 반복하십시오.
  9. 작업 디렉토리와 저장소를 가능한 한 자주 백업하십시오.

저장소에 파일을 사용하면 파일 또는 디렉토리의 두 버전 또는 전체 프로젝트 ( hg diff )의 차이점을 알고 변경 내역 ( hg hist )을보고 변경 사항을 롤백 할 수 있습니다 ( hg up -r ).

코드를 게시하기 전에 리포지토리에 태그 를 지정 ( hg tag ) 하는 것이 좋습니다. 따라서 수정 또는 비교를 위해 게시 한 내용으로 쉽게 되돌릴 수 있습니다.

다른 개발 라인을 실험하려면 주 저장소 ( hg clone )를 복제 하고 실험이 끝날 때까지 뒤로 밀지 말고 간단한 분기에서 수행하십시오 . 실험을 위해 다른 작업 디렉토리를 갖는 것만 큼 쉽습니다.

실험이 업그레이드 된 새 버전 인 경우 복제 한 다음 분기 ( hg branch )하여 한 실험이 다른 실험을 방해하지 않고 리포지토리의 모든 복사본을 업데이트 된 상태로 유지할 수 있습니다.

Linus Torvalds (프로젝트에서 수만 개의 파일과 수백만 줄의 코드를 처리 하는 ) 는 Google 에서이 도구가 CVS, SVN 또는 수많은 무료 및 상업용 도구가 될 수없는 이유에 대해 이야기했습니다. ; 볼만한 가치가 있습니다.


1
나는 Mercurial도 선호합니다. 코딩하는 동안 마지막 커밋 이후 변경된 모든 행을 보여주기 때문에 Netbeans의 지원이 마음에 듭니다. 또한 제품 트리에서 새 / 변경 / 변경되지 않은 파일을 색상으로 코딩합니다. OP에 도움이 될 것 같은 소리 : I lose track of which file I've edited or changed. HGE 도이 작업을 수행 할 수 있지만 사용하지 않았습니다.
JD Isaacks

1
프로세스를 설명하고 도구를 사용하여 프로세스를 수행하는 방법의 일부인 +1
Donal Fellows

부수적 인 질문으로, .xcodeprojXcode가 iOS 프로젝트에 사용 하는 파일은 Mercurial이 무시하도록 지시하는 것으로 간주됩니까, 아니면 파일을 동기화 상태로 유지하는 것이 중요합니까?
Kevin Yap

1
@Kevin Xcode에 대해 잘 모르지만 최신 IDE와 도구에는 전체 프로젝트 항목 (언어 및 라이브러리 버전, 코드 형식 규칙, 종속성 등)과 사용자 기본 설정 (물건을 배치하는 디렉토리, 패널)에 대한 별도의 구성 파일이 있습니다. 레이아웃, 스킨, 글꼴 크기, 개인 서명). 팀이 동의하면 전자가 저장소에 포함될 수 있습니다. 리포지토리에서 업데이트하면 다른 사람의 환경 설정을 덮어 쓰게되므로 빠르게 성 가시고 역효과를 낳기 때문에 후자를 포함해서는 안됩니다.
Apalala

1
@John : NetBeans는 지원하는 모든 VCS에 대해이를 수행합니다. 이 시점에서 이는 IDE의 기본 기능 일뿐입니다.
Mike Baranczak

13

나는 Git을 강력히 추천한다. https://lab.github.com/ 에서 자세히 알아보십시오.

Git이 마음에 들지 않으면 다른 버전 제어 솔루션이 있습니다. SVN을 확인하십시오.


1
Git의 일상적인 사용자로서 필수 명령을 선택하는 것이 매우 쉽고 직관적이라고 덧붙이고 싶습니다. 그리고 그것에 대한 지원은 훌륭하므로 도움을 찾을 때 길을 잃지 않을 것입니다. 나는 SVN을 사용했지만 그것은뿐만 쉬운 일이 아니었다 나를 하지만 많은 사용자에 대한 괜찮을 수 있습니다.
Muhammad Usman

1
+1 또한 고려하십시오 : 사람들은 svn (VCS)에서 git (DVCS-d = 분산)으로 이동하지만 GIT에서 SVN (선택을 통해)으로 이동하지 않습니다.
Michael Durrant 2016 년

7

그냥 당신입니까?, DVCS를 사용하십시오

직관적으로 들리는 것처럼, 분산 버전 제어 시스템 (수은, 자식, 바자)은 중앙 집중식 시스템 (svn, cvs)보다 시작하는 것이 좋습니다. 그 이유는 머신에 설치하고 리포지토리를 로컬로 실행하는 것입니다. svn과 같은 중앙 집중식 시스템에서 클라이언트와 서버를 설정해야합니다. 그런 다음 변경 사항을 저장하려면 서버에 연결해야합니다.

DVCS를 사용하면 로컬 리포지토리이며 원하는 경우 bitbucket.org 또는 github.com과 같은 서비스를 사용할 수 있습니다.

IMHO, 수은은 더 친숙하고 동등하게 DVCS를 시작할 수 있습니다.

다른 사람이 있습니까? DVCS를 사용하십시오!

DVCS를 사용하여 팀과 작업 할 때 많은 이점 이 있습니다 . 중앙 집중식 시스템과 달리 가장 중요한 점은 커밋 레이스가 없다는 것입니다. 기술적으로 각 개인의 저장소는 지점이므로 이러한 분기가 병합되어 변경 사항을 알지 못하는 경우도 있습니다. 즉, 이와 같은 버전 기록 대신 사람들이 작업을 직선으로 진행할 수 있습니다.

여기에 이미지 설명을 입력하십시오

모든 사람들이 임시로 커밋하는 다음과 같은 결과가 나타납니다.

여기에 이미지 설명을 입력하십시오

각 버전은 버전 관리 (즉, 커밋하기 위해 경주하지 않음)하는 동안 자신의 작업에 대해 걱정하고 커밋하기 위해 서버에 대한 연결에 대해 걱정하지 않습니다.

행운을 빕니다


1
+1 아주 좋은 예! 최신 도구를 사용하여 복잡한 병합 트리에서없는 고통을 강조하도록 편집해야합니다.
Apalala

5

간단히 말하면 Subversion (SVN)과 Git이 가장 인기있는 것처럼 보이는 대안이 많이 있습니다 (따라서 웹에서 솔루션을 찾는 것이 가장 쉽습니다).

둘 다 다릅니다. SVN은 더 간단하지만 Git은 서버를 시작할 필요가 없습니다. 로컬 버전을 제어 할 수 있습니다.

Linux가 있고 Git을 사용하기를 원한다고 가정하십시오.

  1. 힘내 설치
  2. 디렉토리로 이동하여 'git init'명령을 실행하십시오.
  3. 파일 추가, 변경 사항 검토, 커밋 방법 알아보기 ...
  4. ... 고급 작업 (로그 검토, 변경 사항 되돌리기, 파일 무시, 브랜치 생성, 병합, 리모트 생성 및 사용, 서브 모듈 사용, SVN 지원 사용 등)

이것이 당신이 시작하는 데 도움이되기를 바랍니다.


1
SVN에는 서버가 필요하지 않지만 저장소는 작동하는 디렉토리와 다른 디렉토리에 있어야합니다. SVN 및 CVS는 일반적으로 일상 작업에 네트워크 연결이 필요하지 않으며 공동 작업 및 분산 소프트웨어 개발을위한 중앙 저장소가 필요하지 않은 GIT 및 Mercurial과 같은 도구를 위해 더 이상 사용되지 않습니다.
Apalala

이것이 실제로 localhost에서 SVN 저장소 서버를 만드는 것과 동일하다고 생각하지 않습니까? 필요한 것은 중앙 리포지토리를 구성하고 유지 관리하는 것이며 파일을 이동할 때 SVN 리포지토리에 여전히 액세스 할 수 있는지 확인해야합니다 (파일을 다른 시스템으로 이동할 때마다 전체 중앙 리포지토리를 복사 할 생각조차하지 마십시오). 또한 Subversion은 더 이상 사용되지 않는다고 생각하지 않습니다 (CVS에 대해서는 이야기하고 있지 않습니다)-중앙 집중식이며 경우에 따라 중앙 집중화를 시행하는 것이 더 좋습니다.
Tadeck

Apalala, 몇 가지 질문 : Mercurial은 사용자가 특정 변경을 작성한 정보를 어떻게 처리합니까? Git에서 변경하고 다른 사람으로 변경을 커밋하여 엉망을 만들 수 있습니다 (커미터와 제출자를 구별하는 기능이 있지만 명확하지는 않습니다). Mercurial이이 분산 버전 제어 관련 문제를 해결 했습니까?
Tadeck

2
@Tadeck 그것은 Mercurial과 GIT가 내 이해에서 작동하는 방식이 아닙니다. 이 과정에서 한 사람이 커밋, 풀 또는 패치로 저장소에 들어가는 것을 담당합니다. 분산 리포지토리에서 누군가가 푸시 권한을 가지고 있다면 이미 마음을 다해 신뢰합니다. Linus Torvalds는이 대화에서 잘 설명합니다 : youtube.com/watch?v=4XpnKHJAok8
Apalala

@Tadeck SVN과 관련하여 많이 사용했으며 CVS보다 개선되지 않았다고 생각했습니다. 다시 한 번, Torvalds는 이전에 연결 한 비디오에서이를 잘 설명합니다. 오프라인으로 작업 할 수없고 병합 할 수 없기 때문에 이전 SCM 도구는 더 이상 사용되지 않습니다.
Apalala

2

Apalala 제안, 나는 밖으로 체크 아웃을 권장 hginit . 버전 관리가 처음이므로 첫 페이지를 건너 뛸 수 있습니다. 그것은 당신에게 좋은 소개를 줄 것입니다. 나중에 특정한 질문이 있으면 SO에 게시 할 수 있습니다 .


0

나는 대다수의 의견에 반대하고 Subversion을 추천 할 것입니다. Subversion은 사용하기 쉽고 개인과 소규모 팀이 필요로하는 모든 작업을 수행합니다. 성숙한 제품이므로 모든 IDE가 잘 지원합니다. 예, Git의 모든 기능을 갖추고 있지는 않습니다. (나는 Mercurial을 사용한 적이 없으므로 그것에 대해 이야기하지 않을 것입니다.) 그러나 대부분의 개발자는 이러한 추가 기능이 실제로 필요하지 않습니다.

여러 저장소? 나는 그것들에 대한 합법적 인 용도가 있다고 확신하지만 결코 그런 적이 없습니다.

네트워크 액세스없이 로컬 커밋을 수행 할 수 있습니까? 디스크리트 변경을 여러 번 수행하고 리포지토리 서버에 액세스 할 수 없다면 정직하게도 얼마나 자주 발생합니까?

Git은 분기 및 병합을보다 쉽게 ​​처리 할 수 ​​있습니다. 그러나 한 사람의 팀에게는 그렇게 큰 문제가 아닙니다.

Linux 커널 규모의 무언가를 위해서는 Git을 사용하십시오. 우리 모두에게 Subversion은 충분합니다.


다운 보팅. SVN에없는 Git의 기능 (가벼운 분기 및 쉬운 병합 등)은 큰 프로젝트만큼 작은 프로젝트에서도 유용 할 수 있습니다.
Marnen Laibow-Koser

1
@ MarnenLaibow-Koser 그래, 그 당시에는 내 의견 이었지만 Git을 몇 년 동안 전문적으로 사용한 후에 나는 너와 동의해야한다.
Mike Baranczak

우수한! 당신은 동화 될 것입니다. : D
Marnen Laibow-Koser

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.