The Lounge is rated PG. If you're about to post something you wouldn't want your
kid sister to read then don't post it. No flame wars, no abusive conduct, no programming
questions and please don't post ads.
I've used Git, Mercurial, SourceSafe and TFS, even (from the dark ages) DECset on VMS and an SCM on CDC Kronos systems (darn, can't remember the name, and yeah, SCMs have been around on mainframes since the 1960s). TFS gave me the least amount of trouble. I develop both C# and .NET alongside embedded "bare iron" ARM GCC using Eclipse. TFS worked fine for both.
Working with embedded involves building boards as well as writing code. I used TFS to version schematics, PCB layouts and reference manuals, even field service work instructions, along with code. That's where the database method is handy; it stores binary BLOBs as wll as code deltas.
What I like best is the lack of "file droppings" in source code directories. TFS puts everything in a SQL database. This is developing in a commercial enterprise environment where project management is critical. TFS has a very nice work item structure to track design, bugs, testing, even deployment, and it integrates well with both VS and Eclipse, along with MS Project.
The type of programing is not quite the usual mix. What I need is a common pool of drivers and RTOS tasks that I pick and choose for different circuit boards, sort of an a la carte program design methodology. Code is added to individual files with conditional compiles for different variations, due to IC pinouts, but basically similar targets. Directory level commit gets in the way because individual files are shared across several target builds, not the entire directory. Sure, other SCMs can do file level check in/out, but TFS does it best.
These days I have to use Github, management directives from on high, but I do miss the ease of use with TFS.
I have found TFS or TFS services ( the free online version) to be the easiest I've ever experienced. I recently used Github and find myself cursing the creators. Most of my problems seem to be related to large file handling. I ended up having to learn the commandline just to clean up the messes.i've never experienced anything that frustrating with TFS. Others will swear by Github, but use TFS unless you like pain
Git or Mercurial (Hg). Very small footprint and extremely easy to install and get started with.
They encourage committing early and often so everything is tracked. They are both extremely easy to use though I think Hg's commands are a bit easier to remember for some reason -- though as you'll see they share many commands.
1. Download and install Git or Mercurial. 2. download a .gitignore or .hgignore file (for your language like C#) so binaries etc are (ignored) not committed. 3. c:\MyProject\>git init <ENTER> 3. c:\MyProject\>hg init <ENTER> 4. c:\MyProject\>git add . <ENTER> 4. c:\MyProject\>hg add . <ENTER> 5. c:\MyProject\>git commit -a -m "initial commit of project" <enter> 5. c:\MyProject\>hg commit -m "initial commit of project" <enter>
You are set up and ready to go. now all your changes will be tracked. you can do hg diff or git diff and you'll see diffs You can do hg status or git status and you'll see files that have been changed.
it's so easy. once you use it you will never want to do anything without it because everything is tracked and you can easily move to a previous revision and throw the current branch away.
Oh, well, when you install Hg it will also install TortoiseHg Workbench which is a UI. Also, if you decided to go with the git bash installation then you can type c:/>gitk<ENTER> and a Tortoise-like UI will appear and you can do the work from there. Good luck
I'd add a vote for Atlassian SourceTree - how you get your repos in one place I dont know unless you go github public - I use local git repos and occasionally when working on one project pull from a colleagues company private repo
source control is one thing where I like to 'see' what Im doing, as opposed to command-line, so SourceTree works well for me
I'd recommend Github which also has the advantage that it works with every other tool and development platform out there from Linux to Windows.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
My setup also involves a server where all development projects and files reside. My main development PC uses mapped drives (not available offline, since it is always connected to the server) and my laptop uses the same mapped drives configuration except they are marked to be available offline.
I only work on the laptop one or two days a week. Before leaving the office, I simply synch all the offline files. This allows me to work wherever I need to (on the laptop) with or without an internet connection. When I get back to the office, I let the laptop synch any changes with the file server. As a sidenote, this also makes for a very good backup system...if the server crashed, all my code is safe on the laptop.
One thing I didn't see anyone mention that is specific to your case:
You'll need to be careful with choosing a cloud-based provider. Unity projects can get enormous because the UI will expect to check in your asset files as well. Asset files are very large, and (can be) binary, which means they won't play well with most source code control systems.
Using raw Git will have a learning curve, but you could use your desktop as your "server". Git does not have a built-in concept of a central server. Every machine that has Git installed is both a server and a client. A central server in a Git organization is simply one that all the developers of that organization agree upon ahead of time.
As you work in NET and Unity, I believe that your winner free combination is using GIT with Visual Studio Community Edition. Visual Studio assists you in many GIT functions, and allows you to work in the cloud with Visual Studio Team Services, GitHub and any server that supports GIT Clone, Fetch, Pull, etc. You don't have to settle definitely on one cloud repository, because you can use a different one for each project.
Visual Studio Team Services is great for large software projects because it offers project control tools (Agile, Scrum, etc), and it is the only one that allows you to have some private projects for free. GitHub is the best for open source projects, etc.
I second the Git and BitBucket recommendation. I use it for all of my personal projects. You can access it from any computer, and you can also make code changes directly from your browser (I do this while I'm at work and need to make a quick bug fix).
I know there's a bit of a learning curve with Git command line, so look for some GUI options like GitExtensions, or something like that.
I have been using GIT, but I have had problems branching then not branching, and wound up going back to my basic source control - zip the whole project, putting yyyy-mm-dda_c (where 'a' is a letter that increments through the day, and 'c' is a short comment) at the end of the filename. The only time I have had trouble with zip is in zipping code for OSX on Windows, then trying to go back to it by unzipping on OSX.
I'd suggest using git without a central server - although you could easily use a central server - I suppose your desktop would kind of fill the role of a central server.
Since git is completely file based it doesn't care about where the files are, they can be somewhere over HTTP, HTTPS, or even a local file-system. Since a local file-system is a possibility it means you can use a UNC path to access a file-share on a remote system.
What this allows you to do is that you could set up your projects directory on your desktop as a file share on your desktop, and then pull/push between your laptop and desktop. So you get all the benefits of version control - without needing to set up a server to host it all.
Of course you also lose the benefits of having an off-site backup, but you could always periodically push to some free source control server like Bitbucket or Github periodically.
Also since everyone it suggesting clients - I'd throw Git Extensions into the mix. It's not that polished, but it doesn't try to hide how git is working from you. It's just a GUI layer that maps (more or less) 1:1 to git commands.
1. When we ask how long will it take to fix the issue? they reply, "We don't know, sir". (Any rough estimate at least would help us to plan better.)
We don't know means we don't know. What if I say 3 hours, then discover Hell broke loose and we need 5? We're done when we're done - also reapiring things in a hurry may very well end up in the OP case. Been there...
Anurag Gandhi wrote:
3. Oh we couldn't replicate that issue. Please provide more detail if it will occur again.
Even the IT support hates that but it happens all the times. If we can't repro we can't debug or solve.