장난감 프로젝트에 설정하고 사용하기 가장 쉬운 버전 관리 시스템은 무엇입니까?
저는 CS 부서에서 세 번째 필수 소개 과정을 가르칩니다. 내 숙제 중 하나는 학생들에게 이전 과제를 위해 작성한 코드의 속도를 높이도록 요청합니다. 10 단계 속도 향상은 일상적입니다. 100 또는 1000의 요소는 전례가 없습니다. (1000의 속도 향상을 위해서는 malloc ()으로 신인 실수를 저질렀어야합니다.)
프로그램은 작은 변화로 시퀀스가 향상됩니다. 학생들에게 각 변경 사항과 그에 따른 개선 사항을 기록하고 설명하도록 요청합니다.
프로그램을 개선하는 동안 그것을 깨는 것도 가능합니다. 물러 나면 좋지 않을까요?
제가 이걸로 어디로 가는지 알 수 있습니다. 제 학생들은 버전 관리를 통해 엄청난 혜택을받을 것입니다. 그러나 몇 가지주의 사항이 있습니다.
- 우리의 컴퓨팅 환경은 잠겨 있습니다. 중앙 저장소에 의존하는 것은 모두 의심됩니다.
- 우리 학생들은 엄청나게 과부하 상태입니다. 수업뿐만 아니라 직업, 스포츠, 음악 등 이름을 지정합니다. 그들이 새로운 도구를 사용하기 위해서는 믿을 수 없을 정도로 쉽고 확실한 이점이 있어야합니다.
- 우리 학생들은 대부분의 작업을 쌍으로합니다. 계정간에 비트를주고받는 것은 문제가됩니다. 이 문제는 분산 버전 관리로도 해결할 수 있습니까?
- 복잡성은 적입니다. 나는 CVS 저장소를 설정하는 것이 너무 당혹 스럽다는 것을 알고 있습니다 .-- 1 년에 한 번만 수행하기 때문에 여전히 문제가 있습니다. SVN이 더 어렵다고 들었습니다.
기존 시스템에 대한 의견은 다음과 같습니다.
- 중앙 버전 제어 (CVS 또는 SVN)는 우리 학생들이 다른 학생과 공유 할 수있는 저장소를 만드는 데 필요한 관리 권한이 없기 때문에 배제되었다고 생각합니다. (우리는 유닉스 파일 권한에 고착되어 있습니다.) 또한 CVS 또는 SVN에 대한 설정이 너무 어렵습니다.
- darcs는 설정하기가 쉽지만 공유 방법은 명확하지 않습니다. darcs send (이메일로 패치 보내기)는 유망 해 보이지만 설정 방법이 명확하지 않습니다.
- git에 대한 소개 문서는 초보자를위한 것이 아닙니다. CVS 설정과 마찬가지로 나 자신이 문제가 있습니다.
나는 초보 학생들에게 어떤 소스 제어를 사용할 것인지에 대한 제안을 요청하고 있습니다. 기존 시스템 위에 얇은 베니어를 배치하고 기존 문서를 단순화 할 수있는 리소스를 찾을 수 있다고 생각합니다. 새 문서를 작성할 리소스가 없을 것입니다.
그렇다면 설정 , 커밋 , 되돌리기 및 변경 사항을 파트너 와 공유 하기가 정말 쉽지만 병합이나 대규모 작업이 쉬울 필요는 없습니까?
주요 제약 조건이다 프로그래밍 쌍은 서로 만 서로 공유 작업을 할 수 있어야 하고, 쌍은 매주 변경 . 우리의 인프라는 netapp 파일러가있는 Linux, Solaris 및 Windows입니다. IT 직원이 각 학생 쌍에 대해 Unix 그룹을 만들고 싶어하지 않습니다. 내가 간과 한 더 쉬운 해결책이 있습니까?
( Git Magic 에 대한 훌륭한 참조 와 유용한 의견으로 인해 다른 답변을 능가하는 수락 된 답변에 감사드립니다 .)
나는 Git과 같은 것이 법안에 맞을 것이라고 말할 것입니다.
- 분산 시스템이므로 중앙 저장소가 필요하지 않으며 저장소는 소스 디렉토리와 함께 존재합니다.
- 우편으로 보내고 적용 할 수있는 패치 파일을 쉽게 만들 수 있습니다.
- git이 사용하기 어려워 보일 수 있지만 파일 커밋, 병합, 추가 및 제거에 대한 기본 아이디어는 배우기 어렵지 않습니다.
이 사이트 Git Magic 또는이 팁 사이트 GitReady를 살펴보십시오.
둘째, Mercurial 의 선택
장점
- 훌륭한 문서.
- 분기를 표시하는 그래픽보기 명령.
- 크로스 플랫폼.
- 모든 플랫폼 (TortoiseHG 또는 thg) 용 GUI가 함께 제공됩니다.
- 프로젝트를보기위한 내장 웹 서버.
- 썸 드라이브에 프로젝트를 보관할 수 있습니다.
- 한 쌍의 구성원 만 노트북을 기억하더라도 작업을 저장할 수 있습니다. 그런 일은 결코 일어나지 않을 것입니다.
단점
- 아직없는 경우 Python을 설치해야합니다.
- 하기 쉽지만 또 다른 단계입니다.
- 푸시 / 풀과 업데이트 / 커밋의 차이점 이해.
- (이것은 모든 분산 된 VCS에 공통입니다).
- 머리와 끝의 구별.
- 일부 명령은 즉시 사용할 수 없습니다. 명시 적으로 활성화되어야합니다.
- (이것은 일을 단순하게 유지하기 때문에 일반적으로 커뮤니티에서 유리한 것으로 간주되지만 일부는 동의하지 않습니다).
Subversion은 Windows, Linux 및 Mac OS X에 설치하기 쉽습니다. 어떤 프로그램으로 프로그래밍하고 있는지 모르겠지만 Eclipse 용 subclipse 플러그인은 설치가 매우 쉽고 저장소 복잡성을 숨 깁니다.
그리고 저장소 복잡성? 어쨌든 각 프로젝트 내에 트렁크, 태그 및 분기 폴더가있는 것입니다. 그리고 그들은 시간이 많지 않을 수도 있지만 SVN (또는 이와 유사한 것)을 배울 시간을 가져야합니다. 왜냐하면 그것은 그들의 CV에 잘 어울리는 기술이기 때문입니다.
Fossil 을 살펴볼 것을 제안합니다 -실행할 종속성이없는 단일 실행 파일이며 HTTP를 통해 모든 트래픽을 작동하며 모든 저장소 데이터를 이름을 지정할 수있는 단일 파일에 보관하고 버전 제어 위키, 버그 추적 및 웹을 포함합니다. -서버 상자에서 꺼내십시오. 아, 그리고 완전히 배포되었습니다.
나는 추천 의욕 (또한 'HG'라고 불리는). 분산 오픈 소스 VCS이며 중앙 저장소가 필요하지 않습니다. 매일 사용하는 것은 쉽습니다. 공식 사이트에는 충분한 문서가 있습니다. 예를 들어 QuickStart 를 확인하십시오 .
나를위한 결정 포인트는 Windows- TortoiseHg를 위한 훌륭한 GUI였습니다 . Linux에서도 지원되는 것 같습니다 (직접 시도하지 않았습니다). 물론 대부분의 Linux 버전에 대한 명령 줄 배포판이 있습니다.
물론 이쪽 울타리의 측면에서는 쉬운 것 같습니다. 아마도 바쁜 학생들에게는 개념, 장점 및 일상적인 작업에 익숙해지기가 쉽지 않을 것입니다. 그러나 결국에는 즉각적인 커밋, 모든 개정으로 되돌리고 거기에서 자동으로 새 분기를 만드는 기능, 지능형 비교 / 병합은 대체 할 수 없습니다.
도움이 되었기를 바랍니다!
학생들이 실제로 쉽게 사용할 수 있도록 webdav를 사용하여 공유되는 자동 커밋이 설정된 SVN 서버를 설치할 수 있습니다. 이렇게하면 WebDAV를 사용하여 디렉토리를 마운트 할 수 있고 저장할 때마다 자동으로 커밋됩니다. TortoiseSVN, Eclipse / Visual Studio 플러그인 또는 ViewVC와 같은 일부 웹 액세스 솔루션을 사용하여 기록에 쉽게 액세스 할 수 있습니다. 액세스 제한이 필요한 경우, 세분화 된 액세스 제어를 위해 간단한 구성 파일을 사용하는 통합 Subversion 인증 ( 여기 참조 )을 사용할 수 있습니다 .
구성이 훨씬 쉬워 졌지만 ( 지금은 더 나은 문서화가 있습니다 -SVN Book을 살펴보십시오 ) 액세스 제한과 웹 인터페이스가있는 여러 개의 개별 리포지토리가 필요한 경우 약간 복잡해질 수 있습니다.
Autocommit은 컴퓨터 내부에서 무슨 일이 벌어지고 있는지 전혀 모르는 "회사원 / 상사"를위한 솔루션에 더 가깝습니다. 워드 문서에 대한 버전 제어가 필요합니다. 프로그래밍 과정을 수강하는 학생들은 어쨌든 괜찮은 SCM을 사용하는 방법도 배워야합니다.
Git과 Mercurial은 분산 된 특성 때문에 공유가 쉬워서 좋을 것입니다. 그러나 두 도구 모두 사용하기 쉬운 GUI 인터페이스가 부족합니다 (TortoiseHg는 유망 해 보이며 gitk는 매우 좋은 Repository 브라우저이지만 학생들은 여전히 도구를 최대한 활용하기 위해 명령 줄 도구 주위에 머리를 감습니다.) 또한 분산 SCM의 개념은 이해하기가 조금 더 복잡합니다.
프로 측에서는 GitHub 와 같은 공개 호스팅 솔루션을 사용할 수 있으며 서버 설정에 대해 걱정할 필요가 없습니다. 이것은 또한 공유 솔루션을 정말 쉽게 만들지 만 "서로 만"요구 사항을 깨뜨릴 수 있습니다. 하지만 어차피 그들이 코드를 교환하는 것을 막을 수는 없을 것이라고 생각합니다. 코스 작업에 대한 경험상 코드를 살펴보고 코드가 고유한지 확인하는 것이 복사를 방지하는 유일한 방법이라는 것을 알았습니다.
많은 IDE와 교육 기관을위한 무료 라이선스 (최소한 사이트 주장)를위한 정말 멋진 인터페이스를 제공하는 PlasticSCM 을 사용할 수도 있습니다 .
소스 제어 시스템 설정을 다룰 이유가 없습니다. 예를 들어 Google 코드 사용에 대한 용어를 검토하고 참여하십시오 .
동료 CS 학생과 작년에 사용했으며 훌륭하게 작동하며 유일한 전제 조건은 인터넷 연결입니다 :-)
Bazaar , Mercurial 및 Git 은 귀하의 경우에 적합하게 들립니다. 리포지토리를 만드는 것은 사소하며 학생들이 공유해야하는 모든 것은 파일 시스템에서 서로의 리포지토리에 대한 읽기 액세스 권한입니다.
Darcs는 특히 CS 수업과 같은 소규모 프로젝트에 탁월한 DVCS입니다. 대학에서 Darcs 또는 Git을 소개 받았으면 좋겠습니다. 또한 학생들에게 소개해 주신 여러분을 칭찬합니다.
나는 매일 Git을 사용합니다. 매우 강력한 DVCS이지만 소규모 프로젝트에는 약간의 과잉 일 수 있습니다.
이 버전 제어 시스템 중 하나가 정말 좋습니다.
darcs send
is trivial to setup - when you run darcs send <remote repo>
, it looks in _darcs/prefs/email
of the remote repo to decide where to sent the email to. If there's nothing there then it prompts the user instead.
The receiver of the patch just saves the file and runs darcs apply <patch file>
in the appropriate repo.
So each student can just have their own repos with their own email address in _darcs/prefs/email
and exchange patches by email.
I have had some very good experience with Bazaar. Like Git/Mercurial it is distributed. It is serverless - you do not need a daemon installed on the server hosting the repository, even if you are accessing it remotely (ie, it can work just as an FTP/SFTP share).
A distributed VCS is most flexible. You can check out a branch from a more traditional 'central' repository and gain all the benefit of being able to fork off your own little development separate to the central server, etc and then, perhaps, push your changes back up.
There are import tools for other VCSs such as Subversion though I haven't tried them.
Regarding permissions, an outside service wouldn't require time from your university's IT staff.
For example, Bitbucket (using Mercurial) now allows unlimited private repos with up to 5 users. I'm guessing each new weekly pair of students is working on a new project together, which means they can just initialize the repository, add the other user, and away they go.
If they are not working on a new project every week, permissions would have to be removed and added, and I'd encourage them to have multiple repos (one per account) on Bitbucket so each student has continued access. (This would be a good idea anyway, but for only week-long projects, it may be simpler to just have one student account own the repo and the other with permission.)
Regarding which VCS, I believe Mercurial will be best given your platforms—TortoiseHg being particularly good for new users to explore, if they're unfamiliar with (and you don't have time for them to learn) command-line interfaces.
Specific to your situation, the advantage of DVCS is their copy on the university server (if there is one) is a fully-fledged repo. You may find it convenient for you or TAs to have access, which should be simpler to setup and would last all semester instead of change weekly.
Setting up a subversion repository is trivial; I frequently set one up as a one-off thing for small projects (such as developing code for an answer on Stack Overflow!), and I doubt anybody else who could learn an SCM system at all would have any trouble with it.
$ svnadmin create /home/cjs/repo
$ mkdir my-project
$ cd my-project
$ vi hello.c
[...hack hack hack...]
$ svn import -m 'Initial project import.' file:///home/cjs/repo
Adding hello.c
Committed revision 1.
That said, sharing is certainly an issue. If the students always work together when they work simultaneously, they could use a USB drive, since they can just unplug it and pass it back and forth when one needs to comit, and the person who's going to program alone later can just hang on to it. That's not entirely convenient, though.
Another option, since they all appear to be working on a shared Unix system, is to create a directory with the execute but not read bit set for the rest of the group (or all users) and use a s3cr3t name for the repo under that, one that only the two students know. Passing that secret name on to the prof would allow him to examine student's repos at any time, as well. ("So you submitted the assignment on time, but the e-mail system lost it? Let me just look at the time of that commit....") A script could help set this up.
In fact, the more I think about that, the more I'm beginning to like it. In certain ways, it's simpler than the git solution because the student doesn't have to deal with passing patches around (or forgetting to do so) and the student will be forced to deal with merges before he commits, rather than once things are in the repository (with the subsequent ability to delay dealing with that indefinitely).
UPDATE: Six years later I would never consider using subversion for anything ever again. Git is the way to go. So, while I still think SVN is a bit "simpler", it is just not even worth teaching anymore.
I've used CVS, SVN, Bazaar and Git (in that order of introduction) and I'd have to say for students that SVN is the way to go. In fact, while I was lead TA we implemented SVN as a replacement for the old "submit script" which was a tar and email script. Labstaff setup an Apache SVN-DAV based repository and using the authz file the TAs and instructor could control permissions for per-student directories and group projects at a very fine-grained level leaving students with a very simple path to their first commit. See my tutorial (credentials ripped out by the most recent TAs.. hmm..)
Regarding the use of subversion without intervention by sys admins, I've done this as well in a group-project setting where none of my group members had ever used subversion before and most of them were committing with very little confusion (all but one). I also wrote a tutorial for setting up such a secure shared repository with only basic SSH access here.
I definitely disagree that git is the best VCS for beginners having experienced the blank looks enough at the mention of any VCS system, let alone the mac-daddy-written-by-Linus-himself VCS king, git. It is simply not true that git is no more complex than svn, and the lack of mature n00b tools alone is enough of a reason not to use it in this scenario. I just started using git for a new project that I am developing in Netbeans and already ran into serious limitations with the Netbeans integration. In a single semester you are not going to use any functionality that svn doesn't provide so git is overkill.
Subversion on Windows can be as simple as setting up TortoiseSVN. There is a bit of a learning curve for using it (especially if you've never used a version control before), but you might help that by dedicating half a lesson to it and providing some powerpoint slides for them to download.
As for centralization - I've heard of websites that offer free SVN project hosting. A quick Google search turned up this page, but there are certainly more.
If you are looking for something that is really really esay to set up, then why not go for the free SVN hosting option, you don't have to set up a thing!
Sadly the two older ones that everyone would have pointed you to being Assembla, Unfuddle, have dropped support for their free hosting ( or at lest if you want them to private ), but you can still use Origo this give you both open and closed hosting.
The advantage of this is that you can own all the projects and follow them all, and easily control the people who have access, and you don't have to worry about right for creating repos.
If you do go this route, and you want to eliminate complexity then you must use a GUI svn application to make learning near trivial ( since I doubt there will be much merging going on ). I would recommend tortoisesvn, slips right into your windows explorer context menu.
I would say your best bet will be to try to work with your IT department to set up a system/method for your students to easily create new SVN/CVS repositories.
Probably you could get the IT department to give you the privileges necessary to create repositories for your students even if they won't give the priveleges to the students themselves. You could probably pretty easily write a few scripts to mass-create repositories from lists of students at the beginning of the semester.
RCS for linux.
I've found nothing simpler than RCS for Widows but not all the RCS ports work well so you have to try them which makes it non-simple. Windows just isn't simple for developers. The windows port from http://www.cs.purdue.edu/homes/trinkle/RCS/ is pretty good.
'program story' 카테고리의 다른 글
System.Collections.Generic.IEnumerable '에'ToList '에 대한 정의가 없습니다. (0) | 2020.11.06 |
---|---|
레일에 link_to ruby로 매개 변수 전달 (0) | 2020.11.06 |
Hibernate 또는 JDBC (0) | 2020.11.06 |
Android Emulator의 IP 주소를 얻는 방법은 무엇입니까? (0) | 2020.11.06 |
로그인 실패로 인해 SQL Server 2012를 시작할 수 없습니다. (0) | 2020.11.06 |