{
    "componentChunkName": "component---src-templates-module-js",
    "path": "/courses/devops/scm/",
    "result": {"data":{"module":{"frontmatter":{"duration":"3 hours","slug":"/courses/devops/scm/","title":"Versioning with Git"},"course":{"frontmatter":{"title":"DevOps","slug":"/courses/devops/"}},"slides":[{"frontmatter":{"slug":"/courses/devops/scm/slides/0/","title":"Objectives"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/1/","title":"What is versioning?"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/2/","title":"What is versioning?"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/3/","title":"Why VCS?"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/4/","title":"What do you manage with VCS?"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/5/","title":"Semantic Versioning (SemVer)"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/6/","title":"What types of VCS?"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/7/","title":"Centralized VCS"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/8/","title":"Distributed VCS"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/9/","title":"What is Git?"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/10/","title":"Why learn Git?"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/11/","title":"Git: Ecosystem"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/12/","title":"Git: Basic concepts"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/13/","title":"Git: Repository"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/14/","title":"Git: Common usage scenario"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/15/","title":"Git: Branching"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/16/","title":"Git: Merging branches"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/17/","title":"Git: Resolving conflicts"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/18/","title":"Now, it is a time for the lab work!"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/19/","title":"Git: .gitignore"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/20/","title":"Git: Tagging"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/21/","title":"Git best practices: use rebase instead of merge"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/22/","title":"Git best practices: Conventional Commits"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/23/","title":"Where can you use Git?"}},{"frontmatter":{"slug":"/courses/devops/scm/slides/24/","title":"Open-source project management"}}],"parent":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"duration\": \"3 hours\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"300px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/09d1072b8af806cc44f7b9ac52e4ec4d/5a46d/git-logo.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"41.717791411042946%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB/ElEQVQoz1WS30tTYRzGzz8gVETddBEVQRcRQT+UoYMKVjndhTiSiYlOUmkqtLSEpGY6y6SCaBG4Ilg3FYaFXgVeGJFZljOStIjEzdTNne2co+1wzif2Dk0fePnyfvm+z/t8Hx7JNAxMslBvNiOfsWBEfou7qevZaprirEciPk+hJYepyTFURebL6JDoS+LBioZ2z8ffvickPSXILitGdCNpBl/H3/FtYoTZmWl+Tod5/eIhc5Ff+Jqd1LoO8eP7OBKGgeLzEDu6leVgD6aSJOE4SMKZJ5Su6uq+WsWFc8fxVFporC7gzWCI4oLN9D8L4CraTdnpnbx6/gBJaa1m6eQ+looPkDpfQro/hP7xLUpbLYnSXMw/s6QxsVtyeD88wKP7bTS5reKTovxNhMeGueVzc8dfn11Zvd6YJbTvJ+UtR7vhRQt0oHZ5kcvy0edmxODdzjpc9l20NtiZnBgRvYyHn0eHuHaxlMuewv8eqt2XiOdtFyvr4Q/Ec7chnz2BMR8VQ4aepq78ME7bDlrqbQz09Qq1GcLHgTYGXwZxWLfQ016TJRSkHU0kq2ykWipJuk9hLETX/IvH5qhw7CXU66ej1cWRPRJTk5+QEzEWFyJiRl5aRNMUpExsVqG0NyBXHFtTZuppUVeWVW531tHjq6HrSgVPg/4NEVofqX8gdvc8Y6nnoAAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Versioning\",\n    \"title\": \"Versioning\",\n    \"src\": \"/static/09d1072b8af806cc44f7b9ac52e4ec4d/5a46d/git-logo.png\",\n    \"srcSet\": [\"/static/09d1072b8af806cc44f7b9ac52e4ec4d/222b7/git-logo.png 163w\", \"/static/09d1072b8af806cc44f7b9ac52e4ec4d/5a46d/git-logo.png 300w\"],\n    \"sizes\": \"(max-width: 300px) 100vw, 300px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"h2\", null, \"Objectives\"), mdx(\"p\", null, \"Today, we will do:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Learn what is versioning\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Git introduction\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Lab: Git basics\")), mdx(\"h2\", null, \"What is versioning?\"), mdx(\"p\", null, \"Also known as:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Version Control or Version Control System (VCS)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Source Control Management (SCM)\")), mdx(\"h2\", null, \"What is versioning?\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"It is the practice of tracking and managing changes to software code.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Version Control System (VCS)\"), \" (or \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Source Control Management (SCM)\"), \") - tools that help you keep track of your code with a complete history of changes.\"), mdx(\"p\", null, \"It is now a standard in software development to maintain a \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"single source of truth\"), \" for development teams, which allows multiple developers to work on the same codebase.\"), mdx(\"h2\", null, \"Why VCS?\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"How to share the work?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"How to keep track of changes and their authors?\")), mdx(\"h2\", null, \"What do you manage with VCS?\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Source code, or any \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"text-based\"), \" documents\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Project versions\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Global project version (\", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"tags\"), \", like \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"1.2.4-beta\"), \")\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Each modification is a version!\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Change requests (\\\"Pull requests\\\" in GitHub)\")), mdx(\"h2\", null, \"Semantic Versioning (SemVer)\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"600px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/a51f72b6382a6a5122ead0baf237cdc3/0a47e/semver.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"44.78527607361963%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABzklEQVQoz5WS22/SYBjG+x8bzS48zWR3ni690XjhYUpgM2MSJxNZuRCE2NYFRAm0loAYeqACGS10LT/TD8R56ZM8yfce8h6e95M0TeW7YfAHqqKgadrGLlfKNJtN8fY8bxNbLpeCum7gBwFhGAq/VKnWyL8rCMP3fR4+ekwqvSeSZ7MZT5884+WLFLVaDVmWubV9g/29NFcuXyL3+pB7d+9w+lll++Z1NFVBqpwck8vs8mvkYtsWpUKWD3IO13VwHIfsm30Kcp4oOkc3TG7ff8BuOsvWtR1yb4scHhV5njpg6+oOR8cnSEGzRFB7RRQuWCZjunmwDtYrgdaX+dQrig2mfkS54aC2p9TNGZnSgHLDpdp0qX4bow9mSGH/C0Hj/UoXIPYUYrtAvNawNdRo/KisdYu5iIzc58wP//FJ2Aax/vGvx2/CuLyaFjC9r4IJ4jgmjpeCCQqKw9l89Y7iWGwlDS0by3GZz+dCp8FPC2c0ZrFYEEUR1tDGtmwRvwjbtpmMPbzRiDA831xeMgyDRr0uLpwU6HTadLsmQRCIiUzTpKN3hJ0gufxkMkFRFBRVRVU1er0e0+lU5Ev8J3Rdp91OmnbF/0watlotwaTgb9mIkZNke280AAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"SemVer\",\n    \"title\": \"SemVer\",\n    \"src\": \"/static/a51f72b6382a6a5122ead0baf237cdc3/0a47e/semver.png\",\n    \"srcSet\": [\"/static/a51f72b6382a6a5122ead0baf237cdc3/222b7/semver.png 163w\", \"/static/a51f72b6382a6a5122ead0baf237cdc3/ff46a/semver.png 325w\", \"/static/a51f72b6382a6a5122ead0baf237cdc3/0a47e/semver.png 600w\"],\n    \"sizes\": \"(max-width: 600px) 100vw, 600px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, \"Format: \", mdx(\"code\", {\n    parentName: \"p\",\n    \"className\": \"language-text\"\n  }, \"MAJOR.MINOR.PATCH-LABEL\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"MAJOR\"), \" - when you make incompatible API changes\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"MINOR\"), \" - when you add functionality in a backward-compatible manner\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"PATCH\"), \" - when you make backward-compatible bug fixes\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"LABEL\"), \" - optional, for pre-release and build metadata (extension to the MAJOR.MINOR.PATCH format)\")), mdx(\"p\", null, \"Examples:\"), mdx(\"div\", {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"text\"\n  }, mdx(\"pre\", {\n    parentName: \"div\",\n    \"className\": \"language-text\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-text\"\n  }, \"2.3.1\\n1.0.0-alpha\\n1.0.0-beta\"))), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://semver.org/\"\n  }, \"Read more about SemVer\")), mdx(\"h2\", null, \"What types of VCS?\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Centralized\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Distributed\")), mdx(\"h2\", null, \"Centralized VCS\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"600px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/52d5ec74b6660b7278f6e274cde4a597/0a47e/centralized.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"70.5521472392638%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAACyUlEQVQ4y22TS48bRRCAfeSAxJ0rf4B/wYErP4ITFw78BqRIHFYCKUhRJDgEhCIE4ZU46+wjXtaP7Noz0/PyPG2vH2uP7Zmx1+vY/lD3soYllFSq7uqur6urqwvD4YAoCul023S6HTqdNu12TDuOlJ3PM2XlniDwCcOAKAwIA39nlS8K6fUuKMRxhK4bVGs1KpUKtVqNs/Nzms0mlmUxm01wHIdatcrz4lMODw44/fOEF6V9TsovKT0vcnR4gGEY+J5PQZ4uA7XKKScvStRPyliNcxzDwHFcsnSGbdu4rovve3itFr7v43meUjkOgkAdKseFTjtGCJOPf3nKhz/8zEePn/DBdz/y+LSKb9uk2QxhCkbjMXmWcdHt0uv16Pd7xFGodL1eMxgM1KEFWTNDmLz/8BFv7z3gva+/5a29B+wV9wlMwXg8otlsqAAp6/VrtpsN2+2GzXrNanWt/DugrKEwDCzT5JWuU9d0NEPgWLYqRZpOMQx9B5xMLnFtjZZrEPgm83mq/P1+/waYZzOSZMx0kpBOE7JpwmyakCQjZeUrCyEYDocqcLlcMJ2MSJIhaTphdb28C1xezVWQ1Dy/0dv51d9rhjB2QHllCV0sclarpZrfAbbVowgs28F2XWVNy8Y0LWzLJpOP8q8Mk/EAx2rQsjX8lkGeTf4feHp8xMv9IvXyMY1qhcb5mdoggab5D3Cz2ajMZIbr1ys2m/WbQNuyKNXrPDo65vtymZ8qVXQhlD+dTdF1TQVIuVrkKsvxeMBsOuL6+uousNtpownBu/e/ofDFfd758iGFe1/x+e/PCE3B5fgSTWvuMpQQzzWUxqHDYpH9J8M4xhQm90qHfPLkDz77rcinvz5j/9UZnuPsanjbNvLKt7LdblVTS5HN7jouhYuLriIPo5AkjhjFkbKRf/O18jzF81pqHEURYRi+odIvv2Qcx/wFDSzvF2XnDRUAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Centralized\",\n    \"title\": \"Centralized\",\n    \"src\": \"/static/52d5ec74b6660b7278f6e274cde4a597/0a47e/centralized.png\",\n    \"srcSet\": [\"/static/52d5ec74b6660b7278f6e274cde4a597/222b7/centralized.png 163w\", \"/static/52d5ec74b6660b7278f6e274cde4a597/ff46a/centralized.png 325w\", \"/static/52d5ec74b6660b7278f6e274cde4a597/0a47e/centralized.png 600w\"],\n    \"sizes\": \"(max-width: 600px) 100vw, 600px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Has a single central database (repository)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Single point of failure\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Requires a network to inspect a history\")), mdx(\"p\", null, \"Examples: Apache Subversion (SVN)\"), mdx(\"h2\", null, \"Distributed VCS\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"600px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/c6b4ca50b7bc61ccfcbeb88dcd44958a/0a47e/distributed.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"114.7239263803681%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAAACXBIWXMAAAsTAAALEwEAmpwYAAADOElEQVQ4y52Vy44bRRSGLSFWLHgT1jwOL8CeBZs8QkDsEhBiQxQkCGIUxCKaCQkDSqSB4Ex7fGu7u6u7bn2rvtpu+0d1PB5iM4OUWfxSSX3OV6fOrXvdaoE3tVq16LoFmqaCVhJab6WuzgptU5MN2R74964DrtdLZFmCP05P8duzZ3j54gWenhzj15NjnJ2dIc8zstlevq//BbIggIgiSCkRMoYwCBCF0T7wbSIsigJJIhH4LpjvIokl8jxHlqX7wO5f3QhM0xh13aCuDaJwDiF8LBY1iqJElibYbG4FrFGaFMybIGQu6rqgqG8NrKoaVWXAwzkk99G2FYwpKB1vBdxYYBKjbVtUZQZ/PqIIF22JqqqQ3ibCPEsRhiGE4OA8ItkzYwzG5DcXZUWQQ9meWsKYDCZPsVy2pDxPUVhYt4Vdp94OcCh7m82ZjWR3uz03bXU1JdcCd4brzQrdpsNqvcJ606FpSjR1uedsz7bSi0WFDTp05LMi393FvbapEAQ+Im8GOZtAeTNoFmA6ndATd8mnYm1WSBMNdzqB8Fyy154L7s8RsG0X9IrSYOg4+Pb4KT558B3uPPoJ956c4HW/D601Qd4EKiXQ7/dx9+hnfPrwe9z58Qg/PD/FcDBAVRXomdLAHw7x0aPHePez+3jv8y/x4TcP4ZyfI47/C9RK4K+/+/jg6wd4/4uv8M7de/j46Bew8QilBZalwWDg4GI8xu+vXpGc0RiDwYCAQHcFtGelBRzHwflohOdnf+Ll63MMx2NcXFxQfgloe0xJgTyOEQuOiAVQUoFd5qWpC1LblGDMg5ISSnKYNIFgDDwMaSMVRY6e7TW7QcoyR+BNabOkiaQ5loJT9ZbLhrReLyBEiKZpLrfQlGTH0zKMSXdAQw4i8iC4TxvGOsVa7eWQnqzE5Ujm4KEHKQIahj2gMYbe782GCPwJTKYJqJW6tsoWaF/hzUYIvAml5SDCnG6JNUcSc8oVAfXNQJvThOwFNfQWmKFnZzXLcnqCOxlg7g6RpYpyaH9Mh0Ap+TaHmsOdOBSlnaosy7YR1nWJKAoR2wprvVWswTmnjbPbKleTksb0jexjTc1vxaOIwP8APUPQxKsgST8AAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Distributed\",\n    \"title\": \"Distributed\",\n    \"src\": \"/static/c6b4ca50b7bc61ccfcbeb88dcd44958a/0a47e/distributed.png\",\n    \"srcSet\": [\"/static/c6b4ca50b7bc61ccfcbeb88dcd44958a/222b7/distributed.png 163w\", \"/static/c6b4ca50b7bc61ccfcbeb88dcd44958a/ff46a/distributed.png 325w\", \"/static/c6b4ca50b7bc61ccfcbeb88dcd44958a/0a47e/distributed.png 600w\"],\n    \"sizes\": \"(max-width: 600px) 100vw, 600px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Local database (repository) with the full history\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Independent work\")), mdx(\"p\", null, \"Examples: Git, Mercurial SCM\"), mdx(\"h2\", null, \"What is Git?\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The most popular VCS\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Distributed\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Open Source and free\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Created in 2005 by Linus Torvalds\")), mdx(\"h2\", null, \"Why learn Git?\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Git outclasses other SCM tools\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Git is obligatory to be mastered for everyone involved in software development processes\")), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"600px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/a671cd991ae7310120b30ad06d12320c/0a47e/vcs-popularity.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"66.87116564417178%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABcElEQVQ4y62STU/CMBjH96W9GL35EbwoF4/GA4lnIwk7iFHAyQKODRCHgC9z7dat24zb32xjhfAimtjkSfpb+/z6dH0kzjmU3hBdc4yfRpIkqF3VIMsymo0G5GoVyp2C+m0dlcsKTNNEHMeQfM5x0PFx8sjTtCxxOdKRbtY0DWpLhWEY0Ls6tAcNhm6g024jiqIsJJ8H2G0xHPX8mRBCsljdb0YQBLlwT/VwvEFYzNdVvnyLMAy3C+di/K9w24NtFa676iL/SbjpMTZJV4T7qodS3xeL7OMdHrEFx1GI+DNaOWRZLIQ7CsOhngu/4hhlbYKL/ptIutb6uOkORCKlFJZlCbZtG9PJpBDyrLrz57yx4yRBaRDibBSJRj994iiPOIr/oY4tNJ9eRHX3U4La8DXvw6zDuY+Q++JE7lIwas/ZY2AOFewwBpvO2aZOxp7nQXJdF4TS7BrpB8ZYxmmk8zQcx8nWC6aEgBAimMw43fcNgLfn3ASIpWUAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Git outclasses other SCM tools\",\n    \"title\": \"Git outclasses other SCM tools\",\n    \"src\": \"/static/a671cd991ae7310120b30ad06d12320c/0a47e/vcs-popularity.png\",\n    \"srcSet\": [\"/static/a671cd991ae7310120b30ad06d12320c/222b7/vcs-popularity.png 163w\", \"/static/a671cd991ae7310120b30ad06d12320c/ff46a/vcs-popularity.png 325w\", \"/static/a671cd991ae7310120b30ad06d12320c/0a47e/vcs-popularity.png 600w\"],\n    \"sizes\": \"(max-width: 600px) 100vw, 600px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, \"The information is from \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://codingsans.com/state-of-software-development-2019\"\n  }, \"\\\"State of software development in 2019\\\", codingsans.com\"), \".\"), mdx(\"h2\", null, \"Git: Ecosystem\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Client tools:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"git\"), \" CLI (command-line interface)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"GitHub Desktop\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"GitKraken\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Sourcetree\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Fork\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"etc...\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Repository hosting services:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"GitHub\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"GitLab\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Bitbucket\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"etc...\")))), mdx(\"h2\", null, \"Git: Basic concepts\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The Git project:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"on your computer\\xA0- \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"local repository\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"in a remote location\\xA0- \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"remote repository\")))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Each set of changes to files in the history is a \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"commit\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"When choosing what to commit, files are \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"staged\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Each commit has a \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"parent commit\"), \" (except for the first one)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The current commit is the \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"HEAD\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Retrieving commits from the remote repository is \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"pulling\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Sending commits to the remote repository is \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"pushing\"))), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://git-scm.com/doc\"\n  }, \"Official Git documentation\")), mdx(\"h2\", null, \"Git: Repository\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"It is the \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \".git/\"), \" folder inside a project\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"It tracks all changes made to files in your project\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"It stores the entire history of changes\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can be \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"local\"), \" and \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"remote\"))), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Note! If you delete the \", mdx(\"code\", {\n    parentName: \"p\",\n    \"className\": \"language-text\"\n  }, \".git/\"), \" folder, then you delete your project\\u2019s history.\")), mdx(\"h2\", null, \"Git: Common usage scenario\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Checking out remote changes:\", mdx(\"br\", {\n    parentName: \"li\"\n  }), mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"git clone\"), \" (very first time) or \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"git pull\"), \" (always afterward)\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Editing a file:\", mdx(\"br\", {\n    parentName: \"li\"\n  }), \"E.g.: add a new function \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"attack()\"), \" to the \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"player.js\"), \" file\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Adding a file to \\\"staging area\\\" for the next \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"commit\"), \":\", mdx(\"br\", {\n    parentName: \"li\"\n  }), mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"git add player.js\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Commit the modification to the \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"local repository\"), \":\", mdx(\"br\", {\n    parentName: \"li\"\n  }), mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"git commit -m \\\"Add player attack\\\"\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Send local modifications to the \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"remote repository\"), \":\", mdx(\"br\", {\n    parentName: \"li\"\n  }), mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"git push\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Resolution of any \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"conflicts\"), \":\", mdx(\"br\", {\n    parentName: \"li\"\n  }), \"File modification and commiting again (starting from step 3)\")), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Note! If you start a project from scratch you do \", mdx(\"code\", {\n    parentName: \"p\",\n    \"className\": \"language-text\"\n  }, \"git init\"), \" to create a new repository\")), mdx(\"h2\", null, \"Git: Branching\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Branch\"), \" is an independent set of commits\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What makes Git so popular (it fits best to Agile and DevOps)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Branch can be an abstraction for a line of development:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"master\"), \" (or \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"main\"), \") is the first and default one, used to keep the stable and tested version of the project\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"develop\"), \" is the place where features come together before merging to \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"master\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"feature_X\"), \" is a branch for a single feature \\\"X\\\"\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Branch can be temporary:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"To have a change request\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"To develop an independent feature\")))), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"600px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/606482f91b40e23d87dce13032a3a8c0/0a47e/git_branch.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"52.14723926380368%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB50lEQVQoz12SyW/TQBTG/adzrhAckFguHBAXDiAu0AOiqSokoIiGpUu6JEpiJ2nieJ14PPbM+Ic8WSg86Tu8RTPf973nlXVIUd3SoInya/z5MdsYz7+6WhtN0+ywzduo6pz+5IBar1zufbl8wEH3HnFxxSTpcDV9hZKQZ5Jz/wX+8hBZWITIEEL8g6KwLJYBJ8OHaKNo//C0GqLVNY0VaFORZiGu04A2BcYql6/ZbZla3IAJqGtBtPwGjXE9L5o9JRjsUZe/HOViJShUvZa1gd3CWoe2VpY5MtxDpD3K5X20LtaS1XyMnA6wMncF00AyOkdnc3QSYESIjnzMKka3rLXGhjckixmq0jTWoo3lNhhRTy/wyk/PST48wk7P2AhBn74nP+sgf74j/t1Bd99gxido0xDeTskPHqMin6KsWImclVQkkz7q6AleL9WcRoq4ag2yzgdRVlTGOsarouTHLCeUhqtYMokyp6LZWOA83djgJO/fLHl9OmGYKcevbUiRYWq1O5+jmeRykdMJBDNp3Jxp/dwsaOettXj9uKA3T0iVWW8XuFjk3CwyBmnJOJUM05KFKBmkirxaz9k7d3kX3suzkGfffXqx2u31cCr57Kd8HKUcBwn7w4zuJOFtP2WU138Z/of2wT+oPPnyZQqpVwAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Git branches\",\n    \"title\": \"Git branches\",\n    \"src\": \"/static/606482f91b40e23d87dce13032a3a8c0/0a47e/git_branch.png\",\n    \"srcSet\": [\"/static/606482f91b40e23d87dce13032a3a8c0/222b7/git_branch.png 163w\", \"/static/606482f91b40e23d87dce13032a3a8c0/ff46a/git_branch.png 325w\", \"/static/606482f91b40e23d87dce13032a3a8c0/0a47e/git_branch.png 600w\"],\n    \"sizes\": \"(max-width: 600px) 100vw, 600px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"h2\", null, \"Git: Merging branches\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The branches are \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"merged\"), \" to have all the changes in only one branch (eventually in \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"master\"), \")\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"When changes conflict with each other, the merge fails:   \", mdx(\"div\", {\n    parentName: \"li\",\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"text\"\n  }, mdx(\"pre\", {\n    parentName: \"div\",\n    \"className\": \"language-text\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-text\"\n  }, \"Automatic merge failed; fix conflicts and then commit the result.\"))))), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"600px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/37c92224e9769057771fd98376edd52d/0a47e/merging-branches.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"32.515337423312886%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABIklEQVQoz22QS0/CUBSE+/8xJv4DceOCjTtiNC40BBODwoIFGB6mBUpjbYvcRx/3fobySEuczZ0592QyZxwOsNYeGdiCGio6lYL10jtunrCJNsxGMxwpJVrr02dn/k1ruEIqBdbwMl3vtdaA4Xmy5nbgopTCGEOWZ1DAOBzT9Jo4rusShuHJ8G644LI7J4xiCi1p9edcdCYsVv5eD764evMIo6g0/RVbMpHR83s0lg2c85OtMRRF5WRryySp1uR5Xo6Kw3uOXTCnVpW1NV7Vu1p0eXa9O6EVnr8suRQSJ45jhBA1k6rZnlOm3CpB0P9k8fSBkgoD+O8j3IceSZKQpilOEATsTP9LdZ48xzBpdxlf3xP/RMg8Zdp+ZXrzyCZJyp0/lvAZC42XB60AAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Merging branches\",\n    \"title\": \"Merging branches\",\n    \"src\": \"/static/37c92224e9769057771fd98376edd52d/0a47e/merging-branches.png\",\n    \"srcSet\": [\"/static/37c92224e9769057771fd98376edd52d/222b7/merging-branches.png 163w\", \"/static/37c92224e9769057771fd98376edd52d/ff46a/merging-branches.png 325w\", \"/static/37c92224e9769057771fd98376edd52d/0a47e/merging-branches.png 600w\"],\n    \"sizes\": \"(max-width: 600px) 100vw, 600px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"h2\", null, \"Git: Resolving conflicts\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Conflicts\"), \" are changes made on the same part of the same file in two branches\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Must be resolved manually:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"edit files with a resolver tool (or text editor)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"commit the files\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"push to the \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"remote branch\"))))), mdx(\"h2\", null, \"Now, it is a time for the lab work!\"), mdx(\"p\", null, \"Pause reading here, do the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"./lab.md\"\n  }, \"lab work\"), \", and come back later!\"), mdx(\"h2\", null, \"Git: \", mdx(\"code\", {\n    parentName: \"h2\",\n    \"className\": \"language-text\"\n  }, \".gitignore\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \".gitignore\"), \" file contains the files to be ignored by Git\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Works with \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://en.wikipedia.org/wiki/Wildcard_character\"\n  }, \"wildcards\"), mdx(\"br\", {\n    parentName: \"li\"\n  }), \"Eg: \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \".*\"), \" - ignore all files starting with a \", mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \".\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Useful for ignoring files specific to your local development environment: \", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Codeblocks or VScode configuration files\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"code\", {\n    parentName: \"li\",\n    \"className\": \"language-text\"\n  }, \"./node_modules\"), \" folder in Node.js\")))), mdx(\"h2\", null, \"Git: Tagging\"), mdx(\"p\", null, \"So far:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"changes are managed, but not the project\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"all the commits come one after the other\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"the only version available is the commit ID\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tagging\"), \" versions:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tag a \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"commit\"), \" to be a particular software version\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"It is easier to identify the versions\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You must \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"push\"), \" tags to the remote repository in the same way as commits\")), mdx(\"h2\", null, \"Git best practices: use rebase instead of merge\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"600px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/88dcb3b03332dfb80d80f215850941e9/0a47e/merge-vs-rebase.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"70.5521472392638%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAABsElEQVQ4y52S25KbMBBE+f//i6t2K07ZGIS5GhCIiy4nhWQ7ZuPNQ/Si0YzU6u6ZiG2VJe7XEa5XHss594z5/ITTiZciztoQNw0cDtB1/hh1XUdyPsO6Ul8z4jh+gm17nudMXcdQlaRp6nOPet/3ZEmCUwoRx9RNQzQqRZFn/sJsHMMw7NgJkTItC4vdyDR7QCnJy9LHbdcjpSRCTfDxA3c7gSyezJ6ShID0A1QTai922HHEZgKcfhKIzDwzV7U/6EYwj3LnoS5K3DRibxe06nc1t6lJUv+NW5TPR3aaWLMg2awrur3eHwWGY11jtcE4GNt6B7gsC2oYwltjsNYSGSnRx2OQoCTr9Wfgbo2Xx+UC0wxmgjYJOWfDvoGdTyFelM9Happo2zY0ZZ6pqmrHohYCszHUmkrEezsGic7vvq8z1hiid3Pn48cjkeHUgKvPLF/87YcRWWdgFra2aK2JXsfga+yVXC7Y7Ahzt2/Ig8CqcOIAQ1D2FvA1l4rUm/8OzN+7q2rzhHEY/0h+t/6y4dWOO9hjGta+xozde8B/2vANMDIHdfsPwG9UlEVBUeT8BgcdSW2E4xU4AAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Merge vs Rebase\",\n    \"title\": \"Merge vs Rebase\",\n    \"src\": \"/static/88dcb3b03332dfb80d80f215850941e9/0a47e/merge-vs-rebase.png\",\n    \"srcSet\": [\"/static/88dcb3b03332dfb80d80f215850941e9/222b7/merge-vs-rebase.png 163w\", \"/static/88dcb3b03332dfb80d80f215850941e9/ff46a/merge-vs-rebase.png 325w\", \"/static/88dcb3b03332dfb80d80f215850941e9/0a47e/merge-vs-rebase.png 600w\"],\n    \"sizes\": \"(max-width: 600px) 100vw, 600px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://medium.com/datadriveninvestor/git-rebase-vs-merge-cc5199edd77c\"\n  }, \"Read this article\"), \".\"), mdx(\"h2\", null, \"Git best practices: Conventional Commits\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"It is a specification for writing commit messages\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"The commit message should be structured as follows:\"), mdx(\"div\", {\n    parentName: \"li\",\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"text\"\n  }, mdx(\"pre\", {\n    parentName: \"div\",\n    \"className\": \"language-text\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-text\"\n  }, \"<type>[optional scope]: <description>\\n\\n[optional body]\\n\\n[optional footer]\")))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Learn more \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.conventionalcommits.org/en/v1.0.0-beta.2/\"\n  }, \"here\")))), mdx(\"h2\", null, \"Where can you use Git?\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Software development\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Writing (books, articles, theses)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Whatever requires tracking the history...\")), mdx(\"h2\", null, \"Open-source project management\"), mdx(\"p\", null, \"How to contribute to an open-source project on GitHub?\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Fork\"), \" a repository to your account\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Work on a change on your fork\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Ask for your changes to be added to the original repository by creating a \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests\"\n  }, \"pull request\"))));\n}\n;\nMDXContent.isMDXComponent = true;"}}},"pageContext":{}},
    "staticQueryHashes": []}