112

I am working in a governmental institution. The technology being used here and the methods for developing software are quite old fashioned.

They have tons of storage space but no appropriate space to keep and maintain applications that are used to automate most of the work here.

The institution would not allow me to use SCM software like GIT or SVN.

What would be the best approach to keep code quality and be able to add new features in the apps later on?

How can I remember changes I have made to the code without breaking it?

EDIT: I forgot to mention, they have network drives for each of the computers and somehow these network drives make or save backups in periods. However if I don't create my own plan allowing to save my work and be able to add new features without breaking the existing code, there is no big advantage over an SCM solution.

EDIT: Since many people suggested portable Git I have to add more info. I tried installing Visual SVN server, but it failed because I don't have admin privileges to install. I also tried downloading regular Git shell, but the firewall or the network settings didn't allow me to access Git download page. I even tried, sending portable Git to my email which is Gmail. Google detected the exe file in the package, and it too didn't allow me to download the portable Git version on my work computer. Another thing I have to mention, the network policy applied to the computers trough the institution do not allow using USB storage devces. You can use the USB ports to charge smartphone or power some gadgets like small speakers. Also as some people mentioned, there are computers on which not even Internet is allowed.

Vlad
  • 1,011
  • 2
  • 7
  • 13
  • Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/69951/discussion-on-question-by-vlad-how-can-i-maintain-code-quality-without-scm). – maple_shaft Dec 09 '17 at 02:34
  • 4
    you can bypass gmail filetype filter by renaming it a "well-known" extension, like .mp3, .zip . – Pac0 Dec 09 '17 at 15:12
  • @Pac0 yes i named it with zip extension. – Vlad Dec 11 '17 at 12:01
  • 3
    I am asking myself, why the heck does this question still have so much upvotes in year 2017 - I am really scared – Ole K Dec 11 '17 at 12:59
  • 10
    Find another job. These people are unreasonable dinosaurs. You will find so much more job satisfaction somewhere that wants you to use proper modern tools. – Rob K Dec 11 '17 at 15:47
  • 6
    There is no reason that a Government Institution should not use SCM. In fact they are probably breaking a variety of process and audit rules by not using an SCM. I'd suggest you attack it from that angle – jk. Dec 12 '17 at 12:35
  • 2
    @jk brings up a *really* good point. If a defect causes monetary loss, enables fraud, or results in someone being injured or loss of life the auditors will descend upon you like lions on a lamb - and somebody will lose their job. You most likely. That upper management won't risk their pension for the likes of you. – Greg Burghardt Dec 13 '17 at 11:28
  • When you say they don't allow you to use an scm, do you mean literally that, or do they mean you can't use one that is attached to a network? You can use git locally without a server. Are they preventing you from doing that? – Bryan Oakley Dec 16 '17 at 14:00

14 Answers14

177

You can loosely replicate the role source control plays with three simple tools:

  • Back-up software (Commits/Check-ins)
  • Folders (Branches)
  • Performing a directory merge between two directories using a tool like KDiff3 (Merging branches)

Basically your workflow becomes:

  1. Create a new folder (new branch)
  2. Copy files to the new folder (new branch) from an existing folder (existing branch)
  3. Make a back-up of that folder (finish creating the new branch)
  4. Do some work
  5. Make a back-up of the new folder (commit)
  6. Do a directory merge from one folder to another (merge)
  7. Do another back-up in the other folder (commit the merge)

The more monolithic source control systems, like SVN or TFS, basically do this for you behind the scenes.


Now, the reality is this is like a Bus Company telling its drivers that they can't drive buses that have a battery, forcing the drivers to push the bus down hill and then pop the clutch to start the bus... this is terrible and indicates that the current management doesn't know anything about running a bus garage. My condolences.

But at least you can get the bus started.

Greg Burghardt
  • 34,276
  • 8
  • 63
  • 114
  • 41
    This is actually the correct answer given the constraints. It's also how we did it before VCSes became a thing. – Blrfl Dec 05 '17 at 13:45
  • 35
    +1 though the easy counter argument to this would be in the lines... we used to program with punch cards too, doesn't mean we should do it again – Newtopian Dec 05 '17 at 14:57
  • 25
    +1 - for answering the question. There was no source control in my first job and this is how we did things. Note: there were only two of us, we got on well and we mostly worked on separate projects and, with hindsight, it was still a bad idea. Any additional team complexity and it'd be a nightmare. – Bob Tway Dec 05 '17 at 15:10
  • 18
    I doubt the OP would be able to install/download a tool like KDiff3. If he can't install git locally, I doubt he could git anything else running locally. – Ivan Dec 05 '17 at 15:27
  • 5
    @Ivan: After looking through the comments It seemed like the OP was on a Linux machine. I've found organizations using this tech stack usually have a number of diff/merge tools available as part of the normal desktop build, and kdiff3 is a pretty common one. There might be other ones that do directory merges too maybe? Or the OP is stuck merging files one-by-one (ick!). But yeah, this situation just plain sucks. – Greg Burghardt Dec 05 '17 at 16:29
  • @Newtopian Sure, but the constraints are what they are, and the OP is trying to make the best out of a bad situation. I wouldn't want to work in that environment, either. – Blrfl Dec 05 '17 at 19:07
  • 2
    @Blrfl: Very true... hence the upvote, it is likely the least worst option thus far. Though really the whole thing hinges around a good merging tool which he likely will not have access to either... sadly. Though for a lot of us it would be easy to say to hell with this and get some other job, that may not be as easy for him, I empathise with the OP but would not want to be in his shoes. Knowing myself I would start bugging / educating higher management on the necessities of SCM and not quit until I get it, or until I loose it all, whichever comes first. – Newtopian Dec 05 '17 at 19:53
  • 3
    @GregBurghardt How did you conclude the OP is on a Linux machine when they're using VS 2005...? – jpmc26 Dec 05 '17 at 20:51
  • @jpmc26: Looks like I was wrong. It's not in the question, but littered throughout the comments. Bleh. I'll try to update my answer tomorrow. – Greg Burghardt Dec 05 '17 at 21:27
  • 1
    +1 - Right answer, HORRIBLE answer, but the right one. I'm having flashbacks to PC development in the '80s. Thanks... – mcottle Dec 06 '17 at 06:17
  • @mcottle Yeah, flashbacks to the days when versioning systems were so pricy that none of the places I'd worked for could afford them. We didn't have diffing tools either, so it was mostly folders and backups. Errors happened and could be hard to recover from... – Brian Knoblauch Dec 06 '17 at 14:53
  • 2
    Is RCS (Revision Control System) still part of the UNIX/LINUX stack? It's antiquated, but quite capable of at least providing basic Source Code Control – Pieter Geerkens Dec 06 '17 at 15:42
  • From what I can tell this is actually more like how [Git does things](https://git-scm.com/book/en/v2/Getting-Started-Git-Basics), i.e. you're using snapshots (copying the entire directory), SVN etc use file diffs. – icc97 Dec 06 '17 at 15:50
  • 1
    Better than nothing, but this does not really help with merging diverging "branches" (might not be as much of a problem when being the only developer, though), or with documenting that you did why and when (commit messages, `git blame`, etc.). – tobias_k Dec 06 '17 at 16:16
  • @BrianKnoblauch That's right! My first VCS was Mortice Kern Source Integrity around 1995 and it cost more than 250 pounds (UK) per seat. It was very good for the time but only big places could afford these tools. It was hard to justify. Should be easier to do these days. OP needs to build a business case for sane software development practices but it sounds like there's a lot of fear and inertia to overcome. I'd look for a new job if it were me - you're not going to learn anything worthwhile there and you probably won't get the business case approved. – mcottle Dec 07 '17 at 03:45
  • 3
    I heavily agree with this. "No Version Control" is a lame restriction but remember that Linus and friends developed both Linux and Git and they developed Linux first. Git just more or less automated the practices they used when they developed git. (From memory, facts may be more or less accurate.) – emory Dec 07 '17 at 03:56
  • This answer seems like most reasonable at the moment. I tried even sending portable git trough my email on Google but since it contains exe file, it thinks it has a virus so GMail blocked the download of the portable Git package. The last resort would be to try Fossil. It will take time to learn and utilize its power. Yes I can run it in console given that all other things will work smoothly along the way. – Vlad Dec 07 '17 at 09:55
  • I think that mentioned process could be even easily automated using some kind of batch scripts that can copy directories recursively, append "commit message" to specific file or optionally compress them. I believe that every computer have got some command line. The only problem that can be is a blockade made by administrators – mpasko256 Dec 07 '17 at 10:59
  • @Vlad: You could try putting the Portable Git installation into a zip file and e-mailing that. Or change the file extension of the exe file. – Greg Burghardt Dec 07 '17 at 13:09
  • You could also consider configuring your editor to save backup files with time/datestamps in the names (e.g., one backup per day). Not a proper VCS, but it could help if you eventually could get your changes into a real VCS. – user117529 Dec 07 '17 at 20:03
  • @GregBurghardt: If your virus scanner looks inside .zip files, you could encrypt the .zip file with a password when sending it, but I don't know if that would look like an attempt at circumvention. In addition, if .exe files are disallowed, you could consider one of the pure-python/ecmascript/java git implementations. – user117529 Dec 07 '17 at 20:04
  • PrimitiveTechnology as SE. At least it will be fun. – Adrian Iftode Dec 07 '17 at 20:17
  • I won't recommend that approach. You need some VCS, and you need your boss to understand that need. – Basile Starynkevitch Dec 09 '17 at 09:10
139

Although the consensus would certainly be to not work for this company I don't believe that really answers your question.

You can't really replace SCM.

You might not need the usual bells and whistles of a full-blown system. For example, the company may refuse a request for a server, but permit the use of a local SCM. They may dislike git, but permit subversion (or some other versioning system).

There is of course a question: what are your colleagues using, or any previous workers? If you're the first Software Developer they have, then it's your time to push very hard for the resources you need.

In the end, if your company doesn't respect your role and experience and won't permit you the tools you need, then you are going to run into even worse (and more stressful) problems than a lack of source control.

Erdrik Ironrose
  • 4,806
  • 3
  • 13
  • 25
  • 11
    The apps I am working on are a single person projects. And, no, I am not the first programmer here. Many have come here and went away. – Vlad Dec 05 '17 at 12:11
  • If it's possible to discover what method they used, that's where I would start. In the short term you may be able to take backups and get some sort of diff software at the very least. – Erdrik Ironrose Dec 05 '17 at 12:54
  • They have a network drive which I don't know how but it creates backups in periods. Yes. I use it and I store my apps there. The problem is, they have built apps in old ways with old tools and the code is ugly and hard to maintain, though the apps somehow seem to work. They have used them. I just wanted to remove the existing defects with modern tools. But I am not a computer, so I cannot remember all the things I do while coding. – Vlad Dec 05 '17 at 14:16
  • 7
    And I also see frustration in some of the colleagues, when they attempt to use these old ugly structured apps, with a face "Why are we doing this stuff every year". – Vlad Dec 05 '17 at 14:17
  • 6
    @Vlad: you are aware that neither Git nor SVN needs more than a network drive? For VB6 and single person projects, I would go probably work with SVN, simpler to deal with binary files. I did this over several years, until we replaced out last VB6 program. – Doc Brown Dec 05 '17 at 15:54
  • 24
    @Vlad "Many have come here and went away." Find a respectful way to tell them that this company culture likely has something to do with their turnover. – jpmc26 Dec 05 '17 at 19:15
  • 26
    Reminder to self: Ask what SCM the company uses in interview. If the do not know or say none, then tell them, thank you for your time and wasting my time. – joojaa Dec 06 '17 at 11:21
  • 4
    I think those people who think SCM is absolutely essential should know that still many people program COBOL on mainframe systems, and SCM is usually not available there. People use file locks, talk to each other and merge manually. This is a lot of extra work, but it is nevertheless possible to produce useful software. – J Fabian Meier Dec 06 '17 at 13:05
  • 5
    @J.FabianMeier there's a big difference between "possible" and "a good idea". The only reason not to use an SCM is if it's simply impossible to use one (like in your example). Any other reason is just a terrible idea. – Erik Dec 06 '17 at 13:23
  • @J.Fabian Meier I agree it is possible to create software, but in my experience no amount of security, talking or effective merging can do the job of SCM. You need backups and you need a way to handle them. Manual backups are a way of versioning software sure, manual merging sure, but there is no process that can replace it. What software you use or how you do it doesn't matter (except in terms of efficiency), but it needs to be done. – Erdrik Ironrose Dec 06 '17 at 15:17
  • 1
    On single person projects (and especially single-file utilities), RCS can be useful. – jrw32982 Dec 06 '17 at 17:34
  • @J.FabianMeier "COBOL on mainframe systems, and SCM is usually not available there." - I don't think this is an excuse (from company's POV). I would expect that code is run on mainframes but you don't program on mainframes. COBOL code is, after all, just an ASCII file and you can modify it/version it/... on desktop PC even if it targets mainframe from 80's. – Maciej Piechotka Dec 10 '17 at 00:29
  • @Maciej Piechotka - Actually, COBOL could be stored as EBCDIC instead of ASCII and all computer source code is just a text file. – DocSalvager Dec 11 '17 at 16:49
  • 1
    @J.FabianMeier, in 1981 (yes, just over 36 years ago as of this writing), I worked a summer job at Charter Information Systems in Austin, TX. (They're long gone now.) They were primarily a COBOL data processing shop. They knew about source control and software configuration management, and they practiced it religiously. Using 9-track 800 bpi magnetic tapes. Just because it is mainframe COBOL doesn't mean there's no SCM. – John R. Strohm Dec 11 '17 at 22:43
26

Basically, there is a management problem (your organization don't understand the basics of software development process, e.g. the V-model) condensing into the apparent inability of using minimal present-era workflow, methodology, and tools. This is common (read about Peter's principle).

BTW, I guess that recent SNCF railway incident in Paris at end of 2017 have a similar cause (total lack of software culture at high management level, hence blockage of a major Paris railway station for more than a day; of course there are very competent IT teams at SNCF, but they are not consulted on major decisions). I can name several European industries with total lack of software culture and I am sure to be able to find similar things even in the USA.

The main issue is: are you working alone on your code base, or do you work with colleagues?

If you are working alone, you can use git locally on your computer, and backup your code (and probably even your .git repository) periodically (to that external storage space). Be sure to never lose more than a half-day of work (so back up your data periodically and reliably).

(I suppose that you know at least both git and svn and that you know the technical superiority of git; if you are not even allowed to install some tool like git on your work computer you need to have a serious conversation with your boss about that issue: you need the ability and authorization to install external open source tools (and that goes with your responsibility to choose, configure and install them wisely & carefully and without known vulnerabilities)

If you are working with several colleagues (I guess less than a dozen of them), you need to convince all of them to use a version control system, and you probably need to tell about that to your immediate (and common) boss. He could (probably) decide (or simply implicitly accept) that some machine (perhaps even some old desktop, perhaps even your own desktop) is used as a git server. You absolutely need to set up that server so that the git repository is backed up at least every hour; you cannot afford (and you need to talk to your boss about) losing more than an hour of work of your team.

BTW, I love Linux, and I would recommend installing Linux on the machine acting as a git server; then installing git and configuring periodical backups (with some crontab job) is very easy; notice that a git server could run Linux with Windows clients using it. I would even suggest you to switch your development machine to Linux if you can. It is "cheaper" and much more developer-friendly

But you need to use an SCM. You might ask your boss a different question: should your team use an existing SCM or should it reinvent the wheel and make your own SCM? Bosses are generally against the idea of reinventing the wheel. If you are permitted to reinvent the wheel, tell your boss that it a full time job for at least a year (that will probably make your boss cry, then accept the obvious way) and have fun making your own SCM. In that unlikely case, be sure to study the existing SCM systems, and ask to make your SCM system some free software tool (to be used and improved by other teams).

You may need to prepare (during several days) a precise and specific argumentation for the need of an SCM: first for your colleagues, then for your immediate boss. Be sure to also suggest concrete solutions (like running some git server on some desktop or some "old" server, and backing it up hourly thru a crontab job)

Don't install any software (from outside, even open-source) on your work computer without permission (in most countries, especially for sensitive IT work for the State, installing a software without permission is legally a crime, and you might lose your job or go to jail if you do that .... so be sure to be authorized to do so; perhaps cover your ass by asking a permission in writing, or at least by email).

(either you'll need to ask on a case by case basis, or you need to get trust from your organization to be allowed to install any legal software -mostly open source or free software- on your work computer).

PS. How to technically build, configure, install then use git (from its free software source code) -or most other free software VCS- on a machine (even without admin permission) is a very different question (to be asked elsewhere). And it is possible to install then use git without any admin permission, provided you have enough resources (time, disk space, some C compiler, etc...) for that.

I tried installing Visual SVN server, but it failed because I don't have admin privileges to install.

This is solvable by some specific configuration and compilation of your git or svn from the free software source code of git or SubVersion -not just a binary package- (and also the source code of dependencies); how to technically do that is a different question (but such technical questions should go at some other place). Of course you should ask permission (from your boss) to compile the source code of git before doing it. He will tell you, or you will discuss with him, about the practical details (if he accepts such a solution) regarding transfering that source code from outside onto your work computer.

Basile Starynkevitch
  • 32,434
  • 6
  • 84
  • 125
  • I have colleagues but we work on single person projects, so having local repository doesn't make a problem – Vlad Dec 05 '17 at 12:13
  • I cannot open the site from where to download Git. And when installing Visual SVN Server , it fails on the last step with permissions on this PC. – Vlad Dec 05 '17 at 12:17
  • 1
    You could ask permission from your boss to download at home, on some USB key, the source code of Git, then bring that key to office. But don't hide that from your boss and ask permission (if possible by email). In soviet-like organizations the free (as in beer) character of `git` could be an argument. – Basile Starynkevitch Dec 05 '17 at 12:22
  • You have two different kind of issues: Why do you need to use some SCM? How to install some SCM with your particular constraints? They go to different forum here. – Basile Starynkevitch Dec 05 '17 at 12:27
  • 5
    Can you access Github and build Git from source? – Willem Dec 05 '17 at 23:21
  • 5
    @RobertHarvey Security must always be a lower priority than doing your job (the organization's, not your job specifically). Because you will be the most secure if you do nothing. And then the government disbands your organization because it never does anything (or it does even less than most government organizations). Or you all lose your jobs because the organization goes bankrupt (if not government funded). Or so on. – user253751 Dec 06 '17 at 00:03
  • 6
    @immibis: Sorry, but that's a straw man. There's no such thing as complete security, and adequate security doesn't require you to sacrifice productivity if you do it properly. Note that the simplest and most effective way to have effective security (given sensible work product handling precautions) is to simply ***unplug from the Internet.*** – Robert Harvey Dec 06 '17 at 02:19
  • 8
    @RobertHarvey That won't stop an employee stealing your IP. The easiest way to stop employees stealing your IP is to not have IP to steal. You said security was the first priority, not second or third, in which case productivity must be the second or third priority, and therefore should be reduced in favour of security. – user253751 Dec 06 '17 at 02:28
  • 3
    @immibis, you sound like someone with no experience working in these environments. You are also talking about customers that can legally lock you up and throw away the key if you steal their IP. It's an environment where mishandling of information (not even outright theft of IP) can cause serious harm to the organization. Of course security is the primary concern. It makes working in that environment a pain. – Berin Loritsch Dec 06 '17 at 13:44
  • @RobertHarvey, unplugging from the internet is a common solution. It makes working with any modern development a pain as everything wants to download the bits from a server as you need it. It's also a big reason why products like JFrog and Nexus exist. – Berin Loritsch Dec 06 '17 at 13:46
  • @BerinLoritsch: No argument there. But the security requirements in the military industrial complex are so onerous that working on an isolated machine is preferable. NuGet offers zip files. – Robert Harvey Dec 06 '17 at 15:51
  • 3
    Another answer that looked like it was good and then random FOSS/Linux fanboyism. – DeadMG Dec 06 '17 at 21:12
  • @BerinLoritsch Perhaps security and productivity are equal priorities at your organization. I maintain that if security is higher priority than productivity, and implemented competently, then you won't get anything (literally) done. – user253751 Dec 06 '17 at 21:23
11

First thing I would do is identify specifically what the government agency (presumably the IT department) is objecting to. If they have storage space, but no way of hosting VMs for servers, then the problem may be that the IT department is saying no to the SVN or GIT server and that is a big distinction. If the problem is the country of origination--i.e. we don't trust tools created by foreign entities--that is a different problem.

You can run GIT completely within the file system, which I have done on infant projects before I'm ready to do anything with them. GIT also does not require administrative privileges to install.

If you absolutely cannot use Git for whatever reason, then you have a couple of options available to you:

  • Educate: By not allowing version control, they are introducing significant risk. You need the ability to back out of changes that prove to be more problematic. You need the ability to save the government money and time, and SCM does that. You need to be able to clearly explain how. You also probably need to do an analysis of alternatives to really drive home the point.
    • One alternative would be hosted Git
    • Another filesystem Git
    • Choose at least one, but not more than two more alternative SCM tools
    • and finally what is like to work without version control
  • Go 70s era development: There is a reason that patch and diff were made so long ago (80s). They were the enabling technologies that made version control possible.

What does 70s era development look like? It ain't pretty, but it's how we got started. Applications were much smaller. Essentially they had some common things:

  • There was the concept of the gold standard. This was the master source code that had features complete.
  • There was a Configuration Management (CM) team. Their responsibility was to get changes from development into the gold standard correctly. This is where you need patch and diff to substitute for the team.
  • You worked from a local copy of the source code. You finish a feature in it's entirety and submit it to the CM team for them to integrate. Usually there is an accompanying document so that new files get created and obsolete files get deleted, etc.
  • Then you fix any errors from the integration process.
  • Before you can entertain another feature or bug fix you get a new copy of the gold standard.

Essentially, it is an error prone process with lots of potential for things to go wrong. The idea of "branching" is easy to implement, but a nightmare to manage. The major issue is that when you have too many copies of the source code it's hard to understand what is the correct baseline for production. For practicality's sake you have to become single threaded.

This is what you need to include in your analysis of alternatives.

Berin Loritsch
  • 45,784
  • 7
  • 87
  • 160
  • Nah, the people here do no consider the IT department as a crucial part of the work. They consider it a secondary, a department that is just a service to the other departments. So it can suffer :) – Vlad Dec 05 '17 at 14:12
  • 4
    @Vlad, did you investigate whether its server resources that are restricted or the application itself? If it's server resources you can use git in file mode and it will be much better than doing it the hard way (i.e. 70s era). – Berin Loritsch Dec 05 '17 at 17:24
  • 5
    I have gotten a long way with educating my clients what costs are associated with their decisions. An analysis of alternatives is a great way of communicating the implications of those decisions. Sure, it's a lot of work, but a few days of documentation and editing can save you weeks of heartache and headache later. – Berin Loritsch Dec 05 '17 at 17:27
9

Given the constraints you mention in the comments (e.g.: can't get to Git download page, Windows platform, and using Visual Studio 2005), I can see 2 options, both of which I have used before in a similar situation:

  1. Use Visual SourceSafe as Emerson suggests in a comment. I worked with a team using VS 2005 some years ago, while most of the rest of the company was using standard version control in Linux/Unix, and they happily used Visual SourceSafe for their CM. It's pretty old-fashioned at this point, but better than nothing.
  2. Speaking of better than nothing, I've been in a similar bind myself. If you can't even use VSS (perhaps the plugin is not installed?), and since you say there is plenty of storage space available, hopefully you are allowed to use some of it. I implemented a manual file-based version control protocol. At the end of every work day, I would copy my code base to a new date-stamped directory. If I needed to refer back to previous work (or roll back), I would look at previous dated directories to find the change I needed. Since you have Visual Studio available, within a couple hours, you could probably use VS 2005 to write a simple tool to help you automate the directory creation and file copying.
Ogre Psalm33
  • 199
  • 6
  • 1
    I +1ed for your first option. Your second option makes me want to throw up. But I understand. – jpmc26 Dec 06 '17 at 01:45
  • @jpmc26 Sometimes you're just working in a restrictive environment in the 1990s (or *feels* like it's stuck in the 1990s) and you literally have no other option. Not pleasant, but better than nothing. – Ogre Psalm33 Dec 06 '17 at 14:19
8

They have tons of storage space

Are you allowed to use it at your on decision?

If so you could create a file system remote repository which is better than nothing. The downside is that pushing becomes slow while the project is growing because git needs to download the whole repository to look for the changes...

so far the computers behave like ordinary user, forbidding me to install third party software.

git also comes as a portable app so that you can install it in your $HOME or %USERPROFILE% path.


As a conclusion: I would not let them forbid me using a SCM1. I would use it "in private". After all nobody cann tell if your code has been developed with or without being checked in somewhere...

1) when I started using git some years ago my customer preferred a different SCM which was quite slow and unreliable (which is sort of a NOGO for a SCM after all (o; ). I used git "in private" on top of the other SCM with a "file based" remote on a network share and only checked in into their SCM after a new version of the product had been released.

Timothy Truckle
  • 2,336
  • 9
  • 12
  • 3
    I cannot open the site from where to download Git. And when installing Visual SVN Server , it fails on the last step with permissions on this PC. – Vlad Dec 05 '17 at 12:12
  • 3
    @Vlad is it restricted by your companies firewall? Are you allowed to connect an USB stick? Is this link accessible? https://github.com/sheabunge/GitPortable/releases/download/v2.13.0-devtest.1/GitPortable_2.13.0_Development_Test_1.paf.exe – Timothy Truckle Dec 05 '17 at 12:24
  • 3
    I am not allowed to insert USB storage devices, apart from charging my smartphone. – Vlad Dec 05 '17 at 13:33
  • @Vlad CD/DVD? download the installer and put into your dropbox/onedrive/google drive/other cloud storage service? FTP from your home PC? It seems odd that they would allow you to plug your phone but not a USB stick into your PC – Baldrickk Dec 05 '17 at 14:00
  • @Baldrickk Hmm, Google drive might do the job. Not sure what would be the advantage over ordinary folder on my disk :) – Vlad Dec 05 '17 at 14:20
  • 19
    Bypassing protections against putting things on the company computer, no matter how reasonable those things are, will get you fired and could possibly even get you in legal trouble. Don't do it! – Sebastian Redl Dec 05 '17 at 14:25
  • 1
    @SebastianRedl In general I agree, but this is kind of "self defense" I'm pretty sure that even (Russian) layers understand that a SCM is an important tool for a software developer (as soon as we taught them, that this is like an insurance...) and that it is risky to go without it. – Timothy Truckle Dec 05 '17 at 15:25
  • 2
    @Vlad I mean, as a way of accessing the installer for git. as Sebastian Redl says though, do make sure you are allowed to run software on your machine first. – Baldrickk Dec 05 '17 at 15:50
  • Hmm. The last idea that comes to my mind is, either try Fossil or I send a portable installer of Git to my email account from home. But yes, i know the consequences of installing third party software. Recently a colleague installed a virtual machine and since the PC is low level, Dual Core Pentium with only 2 gigs of RAM, it broke :) The technical support person threatened that it might get bad for the colleague if he installs something again. The same applies to me as well :) – Vlad Dec 06 '17 at 08:29
  • 1
    @Vlad My tip for such cases is cygwin. You need no administrator rights to install it (execute setup*.exe file with --no-admin flag) and comes with almost everything you need. –  Dec 10 '17 at 14:06
8

Your environment

First of all, I would not be so pessimistic like shown in many comments and answers. Yes, this is "stone age", but there are much worse circumstances. If your overall work environment (colleagues, location, pay, interesting programming work etc.) is fine and to your taste, then by all means stick with it. Regarding IT, it is what it is. This does not only happen in government agencies, but also in banking, insurance or wherever there is a very large focus on security, or very old structures.

Inserting an USB stick and running some .exe from there would be immediate cause for termination in other places, so I would not suggest you try to circumvent anything.

Try git once more

Now on your choice. I would strongly recommend git instead of svn for you. If you are doing one-person projects anyways, then git is just a local directory .git inside your application root, nothing else.

Do not ask your boss/IT for an "SCM", but ask them specifically to install git on your machine so you can develop faster and with higher quality. Make it clear to them that you do not wish to push your code to somewhere else, that you do not need a server running somewhere, and that it will not use up significant space or maintenance time.

Git will increase speed and quality for you simply because you can work with more confidence (because you can undo any changes you did) and allow you to work on multiple branches at the same time. I.e., if you are working on a large task, and something comes in that needs your immediate attention, you can just switch to a new branch, quickly fix that, and then return to the long-running task.

Doing it manually

If it just is not possible at all, then of course you can do manual source control. Create manual "tags" by copying your code yourself (maybe create a new directory with the date/time, and a short description of what changed). Keep a Changelog with detailled listings of not only your changes, but also the files you changed, and maybe even more details.

Create "branches" by, again, copying your work, and when it is time to merge back, getting creative using some arbitrary "diff" or "diff3" tools - I don't know if you have any available, you will have to find out.

If all of this costs you a lot of time, then take a good hard look at whether it is really worth it for you to emulate a SCM. If you find that it is worth it, then talk with your boss again. Show him the benefits of your manual SCM (not just "I have a copy of all my old work" but "when bug XYZ happened I was immediately able to find the reason, 5 releases ago"). Then tell them how much faster this would be with git.

Obviously, if this is driving you crazy, looking for a job is always an option.

AnoE
  • 5,614
  • 1
  • 13
  • 17
6

Sell it to them

You left this comment:

They have a network drive which I don't know how but it creates backups in periods. Yes. I use it and I store my apps there.

Go to your superior and say something in this vein:

Boss, I noticed we have a system where we put apps on the network drive and some kind of service makes back ups and keeps track of the history. It seems to me like we're just implementing our own source control system by doing this. We could probably free up a lot of space and make the whole system a lot simpler by switching to a dedicated source control management system, like SVN or git. We'd get plenty of benefits: simpler back ups of historical versions, tools for understanding what changes were made to files over time (very useful info for debugging), easier ways to undo mistakes, and easier ways to combine different people's changes.

I've used these kinds of systems before, and they're very good at the task our custom set up is performing. It's a lot harder to make mistakes with them than it is our current system. They're also very mature and widely used technologies; these tools have been widely used for over 20 years. And on top of that, we can use the most popular software without paying a dime in licensing.

I'd be happy to help picking a client and a server and to set them up. I expect it would only take [insert estimate here] hours to install it if I can get a machine. Any machine would do, even an old desktop about to be retired, as long as we can access it over the network.

The high level summary here is that you need to put it in terms they can understand and are likely to think is worth it:

  • Freeing up resources (hardware and people) for other purposes
  • Lower risk (human error, stable technology)
  • Increased productivity
  • Small cost to implement

Your superiors aren't technical people and they don't care about technical problems. But if you can frame the problem in terms of money and things that cost money, their ears might perk up a little.

jpmc26
  • 5,389
  • 4
  • 25
  • 37
5

I think a lot of people here are missing the "government institution" of this question. Some government networks have very strict regulations on software allowed onto them, and breaking those rules are a fireable offence, perhaps even criminal. I'd push it through management to see if you can get some APPROVED movement on getting the software installed. I wouldn't go cowboy and install stuff myself. If you're running Linux/UNIX, see if RCS (ci/co commands) or SCCS (sccs command) are installed. These are old SCM tools that used to be fairly standard. It's not pretty but better than what I'm about to write below. :)

Since you have "lots" of disk space, create a source tree. What are the basics of SCM on a small scale? Being able to check-in changes, look at what's changed, , tag stuff, and go back to old versions if necessary. One level above the source-tree, create a Makefile or scripts, depending on what you have available, that does the following (these are Linux/UNIX flavored, Windows commands would be different)

make checkin - cp -a source-tree source-tree-date (at least to the minute, if not second, such as source-tree-20171205115433)

make status - diff -R source-tree source-tree-date | less (there'd be a little logic here, defaults to the most recent backup or give an argument to diff against a version

make tag - ln -s source-tree-date release1.0 (make a link to a particular version)

make revert - rm -r source-tree && cp -a source-tree-date source-tree

  • 1
    _Windows commands would be different_ - I guess if you provide the equivalent in windows commands will be a good answer to the question; I believe the OS used here is windows (because of VS 2005). – Emerson Cardoso Dec 05 '17 at 19:33
  • 1
    FWIW, diff doesn't exist in Windows. The closest thing seems to be fc.exe, which only works on two files (not on directories). All the rest have straightforward counterparts. – fede s. Dec 06 '17 at 09:12
2

Well, after reading your question and lots of comments, I understood that you have the following constraints/scenario:

  • 1 person per project;
  • you simply can't use external tools other than Visual Studio 2005 for your project; you can't use GIT or any other SCM;
  • while working locally, you can't let the project in some broken state, because you have automatic backups from time to time, and you need to make it work all the time;
  • you need some history in order to track changes;

If you can't use Visual Source Safe (which has plugin to work with VS 2005), then you could use another approach.

Based on the above items, I suggest you organize your project folders such as below:

trunk           //last functional version of the app. IMPORTANT: YOU DON'T WORK WITH THIS FOLDER
    UnitTests   //important: create unitary tests in order to guarantee stuff is working after changes
    MyClassLibrary1
    MyClassLibrary2
    MyApplication
    Docs
    readme.md
    YouProject.sln
temp              //your working folder; has structure similar to trunk; changes will be commited to trunk;
    UnitTests     //important: create unitary tests in order to guarantee stuff is working after changes
    MyClassLibrary1
    MyClassLibrary2
    MyApplication
    Docs
    readme.md
    YouProject.sln  
build
    .history    //folder to contain changes in files and your comment (like commits in git)
    build.bat   //calls MSBuild to build temp\YourProject.sln, and run all unit tests
    save_on_trunk.bat   //if build is working, saves info from "diff.bat" in folder within ".history" with timestamp, and also overrides "trunk" with content from "temp"
    diff.bat         //compares files from "temp" and "trunk", using "dir" and "fc" commands
    history.bat  //outputs content from .history folder (contains file changes and comments)

Basic rules to follow here:

  • your code control will be performed within the project's folder;
  • you don't ever work in "trunk";
  • you work in "temp", implement unit tests, call build.bat, and then save_on_trunk.bat;
  • IMPORTANT: implement unit tests that run in total isolation; you need this in order to guarantee that new code won't break the trunk;
  • since you have automatic backups, the chances of losing code will be smaller; therefore, you only need to make the "trunk" code to be in a working state all the time.
Emerson Cardoso
  • 2,050
  • 7
  • 14
  • 1
    I kindly ask the downvoter to provide some feedback here. I want to improve my answer to a "_Maintain code quality **without SCM**?_" question. – Emerson Cardoso Dec 07 '17 at 11:07
1

You have ran out of technical solutions. Only political solutions remain.

1) Unionize the developers. If there is already a union, challenge their position as not fairly representing the class of employee that is a developer. If forming a union of developer fails to gain support of half the developers, GO. You are a bad fit.

2) Newspaper ad. If your government doesn't guarantee free speech as a recognized matter of law, this will get you fired.

Joshua
  • 1,438
  • 11
  • 11
  • 2
    1) as someone who is an active member in a union, I can tell that the union can do absolutely nothing about that. A unions purpose is to control collective bargaining and ensure that collective agreement is not being violated by the employer. Depending on the employer, you can actually get fired for trying to form a union if the management gets wind of it. 2) Even if the country does guarantee free speech to its people, as an employee you still can't run to the media. You definitely can be fire for this. – SaggingRufus Dec 08 '17 at 13:35
  • 1
    This answer is lose, lose situation. – SaggingRufus Dec 08 '17 at 13:36
  • @SaggingRufus: Unions can absolutely demand they be provided the right tools for the job. Employee-employer can't go to the media for a private corporation, but a government unit can be held accountable that way. – Joshua Dec 08 '17 at 16:20
  • 2
    as someone who works for a union in a tech company, I can assure you, we have absolutely 0 say. Unless it becomes a health and safety issue, the union has no place. I agree with you on some level. If this wasn't softwear "the right tools for the job" portion of the comment would be correct. Let's say for example you are a carpenter in a union and you employer refused to buy you a ladder and said you need to stack 7 chairs on top of each other to climb. THEN you could say it is the employers obligation to provide you with the proper tools. At this point, it has become a safety issue. – SaggingRufus Dec 11 '17 at 11:13
0

Just run git over a bare directory, with no server involved at all. It does not matter at all that nobody else uses version control, because you can version control your directory. Git was designed for exactly this rogue SCM introduction scenario, and it works well.

You will become a hero when the second person starts using it, even if you have to wait for some dinosaur to kick the bucket for it to spread. It's incompetence to manage large code bases without SCM now. It's like running a business without auditing anything, actually.

Rob
  • 193
  • 4
-1

Git for Windows has a "portable" version. You can copy this to your PC, or keep it on a memory stick, without needing to actually install anything. If the problem is simply installation, this would be a workaround.

Do note that if they are flatly opposed to SCM, you may want to ask pointed questions about ISO-9001, DO-178B or other relevant software development standards.

Graham
  • 1,996
  • 1
  • 12
  • 11
  • 1
    this seems to merely repeat points made and explained in [this prior answer](https://softwareengineering.stackexchange.com/a/361858/31260) that was posted over 20 hours ago – gnat Dec 06 '17 at 11:53
  • @gnat I didn't see the link there? – Graham Dec 06 '17 at 13:30
  • 3
    You could just add your link as a comment to the other answer. – icc97 Dec 06 '17 at 15:44
-1

There are actually three separate things that you would want to insist on as a professional developer: Code reviews, version history, and tracking change requests.

You can yourself track change requests. Not as nice as with the right tools, but you can. The second part is code reviews. For that, you need the previous copy of your code, and a diff tool. When you think a change is ready, you review it yourself by comparing carefully with the previous version, then replace the previous version with a new one.

For version control, if your workplace doesn't allow any decent solution, it's a box of writable DVDs that you need. Every time you have a version that you want to keep to be able to come back to, you create a new DVD.

(Obviously all of this is not advice that should be taken unless you are in a really bad workplace like the OP apparently is).

gnasher729
  • 42,090
  • 4
  • 59
  • 119