DEV Community

Cover image for What is version control?

What is version control?

Marcin Wosinek on January 11, 2024

Version control is a basic but integral tool in software development. Many people don’t prioritize it while learning to program and, often, develop...
Collapse
 
ooosys profile image
oOosys • Edited

I have tried to get clear understanding of the what and why reading various explanations about version control, but in my eyes all I have checked out yet, including yours, failed to provide a nice designed example demonstrating the necessity of version control, the problems it is facing and the mechanisms behind it. Let's take a closer look at the first sentence of the article: "Version control is a basic but integral tool in software development.". I does not explain what version control is at all ... it's just a bunch of words put together to express an opinion. The next sentences following are not much better ...
Well designed explanation requires very deep understanding of the software, far beyond being able to use it including ideas what are the possible reasons making it hard to understand for a novice.

Collapse
 
marcinwosinek profile image
Marcin Wosinek

Thanks for the feedback!

Do you mean that as a beginner, you are still not sure what version control provides you, and if it makes sense to use it in projects?

Collapse
 
ooosys profile image
oOosys

My trouble is to get understanding how to manage synchronization between a github repository and offline files of cloned one after change. It makes simple things complicated ... for the sake of "remembering" all the past I don't need and don't want. So the question is, how to make changing file content of files in a github repo by changing file content offline on a local clone easy? Now it needs more than one step and I am still not fully sure which steps it needs ... What I would like to achieve is to say: "sync the clone and the repo" and stop bothering me by forcing me to put additional work into it only for the version control own needs and purposes.

Thread Thread
 
marcinwosinek profile image
Marcin Wosinek

Thank you, that's an excellent question or questions!

One would be why you need to git add <somethign>, before you commit, and the other why you need to pull the remote to know what is there right now.

Thread Thread
 
marcinwosinek profile image
Marcin Wosinek

I wrote about confusing complexity in Git before:

how-to.dev/why-git-is-so-complicated

It can provide some context for things that bother you in Git.

Thread Thread
 
ooosys profile image
oOosys • Edited

Citation from the linked article:
Git will make your life miserable if you try to use it without understanding it well.
OK ... what is says in other words is:
In order to avoid miserable life the easy way ... don't use Git ...
It's something for guys like Linus Torvalds who are "living inside the command line".

Thread Thread
 
marcinwosinek profile image
Marcin Wosinek

We got to the root of the problem:

There is a knowledge gap between:

  • devs how cannot imagine working without version control, very often Git;
  • others who cannot see the point of making the effort to learn it.

I tried to bridge the gap a bit in those two articles, but as you pointed out in the first comment: the attempt at "selling" Git was not successful, at least with you.

I will probably try some time again, as it really helps in day-to-day work, and it's pitty that most devs have to be first forced to use it, then forced by weird errors to learn it, and sometimes, finally getting completely on-board.

for guys (...) who are "living inside the command line"

I don't live in CLI, but most of my working hours are spent there.

Thread Thread
 
ooosys profile image
oOosys • Edited

I suggest the root of the problem to be another one: it is the tendency of the mind to stick to the past instead of considering mainly only here and now. Imagine you have bought a new notebook because your old one is not worth the repair or much too slow for what you need. You can now decide to keep your old one, or decide to let it go ... make it part of electronic waste you want to get rid of in order to clean up your space from the artifacts of the past or keep it in order to run some old stuff it is still good for on it.
If you have a clear vision of what you want to achieve and now make an improvement, what is the point of keeping the old version with all the details of past changes? There isn't any. The point is artificially created by "What if I made a mistake and need to go back to the past version?". If you made a mistake .... in the past ... just create here and now a new version without this detected mistake and forget about it ... you won't need it anymore ... it was a mistake anyway, right?
The root of the necessity of going back to the past are changes in your vision where the vision was not clear enough in first place, so that the improved version is no more fully compatible with the old one within the system you are using. Now you need to keep track of the changes ... and use all the machinery required to allow you to go back to the past in spite of availability of what you considered an improvement worth the change.
It's a bit like creating a system which has issues in first place and then developing tools to solve this issues, where the much better way would be to create a new system without the issues ...
So the gap is maybe not a gap in knowledge ... it is possibly a gap in the attitude ....a gap between those living almost entirely from their mind thinking they are what they think and those living from the spirit and using the mind as a tool for purposeful shaping of here and now letting the past go to most possible and making sense extent.