Choosing VCS for Single Developer, Small Projects, Two PC's, Two Locations
-
git, becsue - distributed DVCS are addictive - git is the "lowes common denominator everyone agrees on". It's a pain to learn, and both the built-in and the 3rd party visualizations give me UX flinches. Other than that, it does most things right. DVCS gives you rollbacks on stereoids. But that's not the key: they can change how you work with source code.
FILETIME to time_t
| FoldWithUs! | sighist | WhoIncludes - Analyzing C++ include file hierarchypeterchen wrote:
can change how you work with source code
I see that as a bad thing.
-
(I couldn't find a better forum for this q, hope it's not out of place) I am a hobbyist just having fun trying to do things that seem interesting, so I have a range of small projects. I work on two laptops at two locations and use a network location at both locations for file storage (network drive at work and a NAS at home) for backup reasons. So, to work on one project I end up shuffling updates back and forth on a USB stick or having to crank up the work laptop at home and connect via VPN just to pull the files. I'd like to be able to use something like a VCS to manage this, recognising (and liking) the extra benefit of being able to rollback to previous versions etc. (fallen foul of this once or twice already). I haven't used SVN, GIT, Bazaar etc. before so I'm not at all familiar (yet) with using them - though I'm happy with the general concept of version control, just not as applied to software development nor doing so via the VCS used in software development. Clearly my preference is for something really simple that does the two jobs I described quickly and easily - (a) make it easy to work on two different devices at two different locations without shuttling USB sticks back and forth and (b) rollbacks. If it has other features then that's great but not if they come at a significant cost in complexity. So, is there anything you could recommend? Or do I need to make some compromises? (Using VS Express so cannot install AddIns but can add menu commands via the External Tools functionality). Thanks, Mike
I was in a very similar situation, and I ended up using the free SVN hosting here: https://www.assembla.com/[^] That, with TortoiseSVN, makes for an easy time of everything. There are dozens of other sites that do similar stuff, so you're welcome to look around, I just liked their simplicity. The basics of SVN are covered nicely (maybe a little too well for a beginner, but not bad) here: http://svnbook.red-bean.com/[^] Skimming through it should give you enough of an overview to get started. I deleted and recreated my first project's repository and started from scratch a few times before I got the hang of it, but it didn't take long before I had it set up right.
-
You sound very similar to me and it took me a long time to finally get round to using version control. Let me just say this - it is completely worth it. It is not so much about being able to roll back (which is very handy nonetheless), but it forces you to think about what you are doing and to break your coding down into small bite-size chunks which in the long run is very beneficial. I think we can break your post down into two very simple statements: I need to synchronise my files between multiple PCs. I which to use simple version control (commits and rollbacks). For the first statement I would highly recommend DropBox. I use it between the 3 different PCs I tend to use and even on my iPhone. It is the most stable file synchronisation tool I have seen and is free up to a certain size (2GB last time I looked). Now you have your files synchronised, you could use any version control system you liked. For the second statement I would recommend msysgit (Git for Windows) with TortoiseGit to make it simpler. TortoiseGit gives you a right-click context menu so you do not need to learn any command line functions. It is not built into VS, but all you have to do is keep a windows explorer view of your project folder open so you can jump in there and run some git commands when required. It also gives you very clear icons of the status of all of your directories and files (committed, modified, added, etc.). This was the best article on Git I have read: http://nvie.com/posts/a-successful-git-branching-model/[^] Now it does talk about branching a lot (which you may not want to do at first - you may change your mind after reading it), but it also has the clearest diagrams showing how git works. Hopefully this will help your get your head round how it all fits together. TL;DR I recommend TortoiseGit with DropBox.
doc_net wrote:
break your coding down into small bite-size chunks
Hear! Hear! In my opinion, that is the most important thing for teams of developers to do. One of the greatest benefits is that it reduces the need for multiple developers to modify the same file at the same time, thereby reducing conflicts and merges. Having a great merge process is good, but avoiding merges is better. This is why C# (and VB.net) should have had
partial
class
es from the beginning. -
(I couldn't find a better forum for this q, hope it's not out of place) I am a hobbyist just having fun trying to do things that seem interesting, so I have a range of small projects. I work on two laptops at two locations and use a network location at both locations for file storage (network drive at work and a NAS at home) for backup reasons. So, to work on one project I end up shuffling updates back and forth on a USB stick or having to crank up the work laptop at home and connect via VPN just to pull the files. I'd like to be able to use something like a VCS to manage this, recognising (and liking) the extra benefit of being able to rollback to previous versions etc. (fallen foul of this once or twice already). I haven't used SVN, GIT, Bazaar etc. before so I'm not at all familiar (yet) with using them - though I'm happy with the general concept of version control, just not as applied to software development nor doing so via the VCS used in software development. Clearly my preference is for something really simple that does the two jobs I described quickly and easily - (a) make it easy to work on two different devices at two different locations without shuttling USB sticks back and forth and (b) rollbacks. If it has other features then that's great but not if they come at a significant cost in complexity. So, is there anything you could recommend? Or do I need to make some compromises? (Using VS Express so cannot install AddIns but can add menu commands via the External Tools functionality). Thanks, Mike
I STRONGLY recommend using SVN. And here are a few reasons why: 1 - You don't need to master the SVN server application, with TortoiseSVN[^], the client application, you can generate the repository database on your file storage. It's very simple to do it (using the familiar windows explorer right click popup menu, aka shell extension). A simple search will get you started on this if you don't figure it out on your own. 2 - With TortoiseSVN you can make simple commits and updates on your machines very easily, again using shell extensions. Making it very convenient and it has visual indicators of the state of your files, all integrated into Windows Explorer. 3 - SVN is powerful, and TortoiseSVN takes advantage of that. If you ever end up having more complex version control requirements, you'd simply need to start using all options you can ignore now. 4 - You don't remember the changes you made on a document, spreadsheet or source file? No problem, TortoiseSVN makes it very easy to compare the versions side by side, with visual hints for several file formats. So basically you have a powerful tool, with a short learning curve. It's very helpful even if you don't require all of its power. You never know when you gonna need it, and when you do, you will already be acquainted to it.
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson ---- Our heads are round so our thoughts can change direction - Francis Picabia
-
(I couldn't find a better forum for this q, hope it's not out of place) I am a hobbyist just having fun trying to do things that seem interesting, so I have a range of small projects. I work on two laptops at two locations and use a network location at both locations for file storage (network drive at work and a NAS at home) for backup reasons. So, to work on one project I end up shuffling updates back and forth on a USB stick or having to crank up the work laptop at home and connect via VPN just to pull the files. I'd like to be able to use something like a VCS to manage this, recognising (and liking) the extra benefit of being able to rollback to previous versions etc. (fallen foul of this once or twice already). I haven't used SVN, GIT, Bazaar etc. before so I'm not at all familiar (yet) with using them - though I'm happy with the general concept of version control, just not as applied to software development nor doing so via the VCS used in software development. Clearly my preference is for something really simple that does the two jobs I described quickly and easily - (a) make it easy to work on two different devices at two different locations without shuttling USB sticks back and forth and (b) rollbacks. If it has other features then that's great but not if they come at a significant cost in complexity. So, is there anything you could recommend? Or do I need to make some compromises? (Using VS Express so cannot install AddIns but can add menu commands via the External Tools functionality). Thanks, Mike
I have recently started using Git for my source control needs. It's fast and doesn't require running a dedicated server. When working with multiple locations/laptops, you can setup a central repository on a shared network drive that you can publish your changes to, and then pull from there on the other computer. It keeps everything in sync. It doesn't integrate with VS Express, but the command line and GUI work fantastically well. Git has a lot of powerful features that I don't use (yet). But it does the job for simple projects as well. It's worth the steep learning curve.
-
(I couldn't find a better forum for this q, hope it's not out of place) I am a hobbyist just having fun trying to do things that seem interesting, so I have a range of small projects. I work on two laptops at two locations and use a network location at both locations for file storage (network drive at work and a NAS at home) for backup reasons. So, to work on one project I end up shuffling updates back and forth on a USB stick or having to crank up the work laptop at home and connect via VPN just to pull the files. I'd like to be able to use something like a VCS to manage this, recognising (and liking) the extra benefit of being able to rollback to previous versions etc. (fallen foul of this once or twice already). I haven't used SVN, GIT, Bazaar etc. before so I'm not at all familiar (yet) with using them - though I'm happy with the general concept of version control, just not as applied to software development nor doing so via the VCS used in software development. Clearly my preference is for something really simple that does the two jobs I described quickly and easily - (a) make it easy to work on two different devices at two different locations without shuttling USB sticks back and forth and (b) rollbacks. If it has other features then that's great but not if they come at a significant cost in complexity. So, is there anything you could recommend? Or do I need to make some compromises? (Using VS Express so cannot install AddIns but can add menu commands via the External Tools functionality). Thanks, Mike
For up to two developer (or 1 developer using 2 PCs), you can use PureCM (More if you buy a licence): http://www.purecm.com/[^] It could work at 2 locations provide that the server is always running. For basic operations it works well. And since you are using VS Express, you won't be affected by some of the minor problem with the plug in. The main weakness is when multiple operations are done on the same file (move file, rename file, edit, delete...). To avoid problem, it is best to do multiple submits (check-ins) and status refreshing when doing heterogeneous operations on a single file.
Philippe Mori
-
(I couldn't find a better forum for this q, hope it's not out of place) I am a hobbyist just having fun trying to do things that seem interesting, so I have a range of small projects. I work on two laptops at two locations and use a network location at both locations for file storage (network drive at work and a NAS at home) for backup reasons. So, to work on one project I end up shuffling updates back and forth on a USB stick or having to crank up the work laptop at home and connect via VPN just to pull the files. I'd like to be able to use something like a VCS to manage this, recognising (and liking) the extra benefit of being able to rollback to previous versions etc. (fallen foul of this once or twice already). I haven't used SVN, GIT, Bazaar etc. before so I'm not at all familiar (yet) with using them - though I'm happy with the general concept of version control, just not as applied to software development nor doing so via the VCS used in software development. Clearly my preference is for something really simple that does the two jobs I described quickly and easily - (a) make it easy to work on two different devices at two different locations without shuttling USB sticks back and forth and (b) rollbacks. If it has other features then that's great but not if they come at a significant cost in complexity. So, is there anything you could recommend? Or do I need to make some compromises? (Using VS Express so cannot install AddIns but can add menu commands via the External Tools functionality). Thanks, Mike
Mercurial, with BitBucket for private, centralised hosting...or just copy your repo onto Dropbox... Nicer client experience than git (IMO), both on the command-line and GUIs (Tortoise HG in explorer, plus the THG executable supplied with Tortoise to give a GUI client). Mercurial extensions are worth exploring - I use various ones to enable history editing, interacting with Subversion and Git and other capabilities. Setting up a Mercurial server on Windows is pretty easy - there are supplied scripts for working with a web server (FCGI or WSGI), but on an ad-hoc basis,
hg serve
lets you share repositories...Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p CodeProject MVP for 2010 - who'd'a thunk it!
-
Personally, what I'd like is some sort of "VCS-on-a-stick" -- have everything on a USB device that can be carried around and used on any (Windows) system where I may need it. :cool:
Mercurial (TortoiseHG) is very suitable for "VSC on a stick" use. Also you definitely want to look at Fossil (fossil-scm.org) :thumbsup: Perhaps even svn would go, if you were used to it. If you can get online, definitely try one of hosted VCS (Unfuddle :thumbsup:, Bitbucket...) - it will also be your backup. -- dd
-
Stefan_Lang wrote:
run the server
I wouldn't want to run a server at all.
That wouldn't be wise. Even in a single user system, there are many things that can go wrong on the file system level. I suppose those can be dealt with as long as you really only access the repository locally, not over a LAN or WLAN. But if you ever connect your machines to the same network and access the repo from two machines at the same time, all bets are off. I'm not saying this couldn't work, just that there is a good reason for software vendors not to offer such a system, as they would place part of the responsibility on the users' shoulders when they should be helping them getting it off of them. When I say 'run the server', that isn't any more difficult than starting a tool, such as Windows Explorer. AFAIK you may not even need to install anything on your PC or Laptop: the server settings are read from initialization files anyway.
-
I use TortiseHG[^] and BitBucket[^] for version control (I have VS 2010 Ultimate, BTW). TortiseHG is kind of finicky to get working, but once you know how to use it, you can get changes pushed online rather quickly.
public class SysAdmin : Employee
{public override void DoWork(IWorkItem workItem) { if (workItem.User.Type == UserType.NoLearn){ throw new NoIWillNotFixYourComputerException(new Luser(workItem.User)); }else{ base.DoWork(workItem); } }
}
I just started using TortiseHG and BitBucket for things away from work. So far, I am quite pleased. The free private repositories was a huge factor in making that choice.
-
Yeah, since you don't want to use sneakernet for sharing between the two locations and you also want version control, you might want to try and find an online host for it. I use a paid one for my work - beanstalk - and it works REALLY well for our subversion needs. If you need free, there might be some out there, beanstalk has a trial account which is 100MB with 1 user and 1 repository. If that is enough for you, then go for it. beanstalkapp.com You could also use a cloud storage if you just want to shuttle files.
I've used a free Beanstalk account for hobby development the past couple of years. I recommend it. :thumbsup: You can pick between Subversion, Git, and Mercurial. Subversion is more than fine for a single developer. The single repository is not much of a limitation since you can just put each project in a subfolder.
-
I just started using TortiseHG and BitBucket for things away from work. So far, I am quite pleased. The free private repositories was a huge factor in making that choice.
-
Personally, what I'd like is some sort of "VCS-on-a-stick" -- have everything on a USB device that can be carried around and used on any (Windows) system where I may need it. :cool:
I keep a copy of my "C:\Program Files\TortoiseHg" folder on my USB hard drive. Of course, the icon overlays do not function from the USB copy; but TortoiseHg has no problems (that I've found) running from my USB copy on machines where I don't already have it installed. The only real problem is that the settings are not totally portable this way. It still looks at the %USERPROFILE%\Mercurial.ini file for the general settings. So I keep a copy of that file in the USB folder as well to use if I need to. -edit- It's not an ideal VCS-on-the-go solution, but it suffices in a pinch if I really need to work with a repository on a machine that doesn't have Mercurial/TortoiseHg installed. -edit 2- I happened to run across some documentation today about how TortoiseHg picks up settings, and it looks like it would actually use my Mercurial.ini file from within the application directory when running from my USB device. It picks up the config file from the app folder first, then %USERPRIFILE% if it exists, then per-repository "hgrc" settings. So my semi-portable USB usage should actually work better than I originally thought.
-
git, becsue - distributed DVCS are addictive - git is the "lowes common denominator everyone agrees on". It's a pain to learn, and both the built-in and the 3rd party visualizations give me UX flinches. Other than that, it does most things right. DVCS gives you rollbacks on stereoids. But that's not the key: they can change how you work with source code.
FILETIME to time_t
| FoldWithUs! | sighist | WhoIncludes - Analyzing C++ include file hierarchyI wonder: the OP specifically asked about single developer projects, and you suggest and even stress the point of GIT being distributed. Why do you think he needs a DVCS? I mean, I do understand the neccessity of push and pull mechanics in distributed development. But for a single developer, where is the advantage over other non-distributed VCS systems, such as creating a working copy with SVN? Or, more to the point, why would it be worth the extra effort of learning a more complicated VCS? I did ask around a lot, and did read up on the various mechanics. Some operations may be faster, but some will also be slower. But for a single developer, the main difference appears to be the learning curve, and everyone, including GIT protagonists, say that it is very steep for GIT.
-
(I couldn't find a better forum for this q, hope it's not out of place) I am a hobbyist just having fun trying to do things that seem interesting, so I have a range of small projects. I work on two laptops at two locations and use a network location at both locations for file storage (network drive at work and a NAS at home) for backup reasons. So, to work on one project I end up shuffling updates back and forth on a USB stick or having to crank up the work laptop at home and connect via VPN just to pull the files. I'd like to be able to use something like a VCS to manage this, recognising (and liking) the extra benefit of being able to rollback to previous versions etc. (fallen foul of this once or twice already). I haven't used SVN, GIT, Bazaar etc. before so I'm not at all familiar (yet) with using them - though I'm happy with the general concept of version control, just not as applied to software development nor doing so via the VCS used in software development. Clearly my preference is for something really simple that does the two jobs I described quickly and easily - (a) make it easy to work on two different devices at two different locations without shuttling USB sticks back and forth and (b) rollbacks. If it has other features then that's great but not if they come at a significant cost in complexity. So, is there anything you could recommend? Or do I need to make some compromises? (Using VS Express so cannot install AddIns but can add menu commands via the External Tools functionality). Thanks, Mike
Mike, I've used git and Mercurial to do this successfully. For you as a hobbyist I'd recommend Mercurial over git simply because it's more straightforward to use and has a shorter learning curve. I have to say I liked git a little better than Mercurial for this, but the learning curve is hard to justify if version control isn't your main focus. My model for doing it was having a master repository on one machine and a cloned repository on another, and taking Mercurial patches back and forth as e-mail attachments, on USB, or whatever. This was necessary because the content was work-related and my company does not permit using BitBucket, GitHub or any other cloud repository. If you don't want anyone to possibly see what you're working on, then do something similar to my way, otherwise the suggestions given about using a cloud service are the easiest way to go. Avoid SVN for this task. I manage SVN repositories at work and it is a great tool as a central repository, but it is not a distributed system and it isn't nice about being shoehorned into that role. There is a product called SVK for SVN-style distributed processing but I haven't tried it, because it wouldn't install on Ubuntu because it apparently relies on deprecated Perl libraries. It installs on Windows just fine.
-
doc_net wrote:
break your coding down into small bite-size chunks
Hear! Hear! In my opinion, that is the most important thing for teams of developers to do. One of the greatest benefits is that it reduces the need for multiple developers to modify the same file at the same time, thereby reducing conflicts and merges. Having a great merge process is good, but avoiding merges is better. This is why C# (and VB.net) should have had
partial
class
es from the beginning.PIEBALDconsult wrote:
teams of developers
OP wrote:
single developer
:doh:
-
(I couldn't find a better forum for this q, hope it's not out of place) I am a hobbyist just having fun trying to do things that seem interesting, so I have a range of small projects. I work on two laptops at two locations and use a network location at both locations for file storage (network drive at work and a NAS at home) for backup reasons. So, to work on one project I end up shuffling updates back and forth on a USB stick or having to crank up the work laptop at home and connect via VPN just to pull the files. I'd like to be able to use something like a VCS to manage this, recognising (and liking) the extra benefit of being able to rollback to previous versions etc. (fallen foul of this once or twice already). I haven't used SVN, GIT, Bazaar etc. before so I'm not at all familiar (yet) with using them - though I'm happy with the general concept of version control, just not as applied to software development nor doing so via the VCS used in software development. Clearly my preference is for something really simple that does the two jobs I described quickly and easily - (a) make it easy to work on two different devices at two different locations without shuttling USB sticks back and forth and (b) rollbacks. If it has other features then that's great but not if they come at a significant cost in complexity. So, is there anything you could recommend? Or do I need to make some compromises? (Using VS Express so cannot install AddIns but can add menu commands via the External Tools functionality). Thanks, Mike
-
Ditto on the recommendation for Mercurial/TortoiseHg/BitBucket. I played around with Subversion, Git, and Mercurial, and the TortoiseHg setup was the easiest of all of them to get configured on my Windows XP machines.
You may want to try projectlocker.com Free private svn repositories, a bit limited in space (I think it's 300MB)... but it's been working for me.
daniero
-
I've used a free Beanstalk account for hobby development the past couple of years. I recommend it. :thumbsup: You can pick between Subversion, Git, and Mercurial. Subversion is more than fine for a single developer. The single repository is not much of a limitation since you can just put each project in a subfolder.
I think these are the most popular and I'd recommend Subversion (SVN) which has several interfaces like TortoiseSVN that aren't part of the IDE (VS). Git and Mercurial are better for collaboration and networked environments. Subversion is perfect for small groups or individuals. I don't know if you can put it on a USB but you can run it standalone on one machine. Karl
-
But it's not because you can't extend VS that you are unable to use a version control system. You can use one from the command line or use a client like tortoise. You'll learn more about source control too.