{"id":1979,"date":"2021-07-07T10:38:42","date_gmt":"2021-07-07T10:38:42","guid":{"rendered":"https:\/\/gitprotect.io\/blog\/?p=1979"},"modified":"2023-11-22T12:48:25","modified_gmt":"2023-11-22T12:48:25","slug":"git-forking-workflow","status":"publish","type":"post","link":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/","title":{"rendered":"Git Forking Workflow"},"content":{"rendered":"\n<p>Recently I was talking to my friend about Open Source projects. That was a lively debate and we wondered about how to cooperate in such projects, of course from the technical point of view. How are they stored, how can you contribute to their development, and finally \u2013 who and how controls what the community adds to such a project. This inspired me to describe a mechanism called forking in Git because a lot of people have heard of it, but when you need to delve into the details, it turns out that not everything is so obvious. Let&#8217;s check how it works and what a forked repository is.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-forking-in-git\">What is forking in Git<\/h2>\n\n\n\n<p>Fork and clone&#8230; Is it the same? Actually<em> forking&nbsp;<\/em>in Git in short means copying a project. This will copy the entire project, just like the Clone function, but there is a fundamental difference between them. If we do Clone, we will just create a local copy of the repository, so to say &#8211; cloned repository, and all synchronization will take place between the base repo and our local copy. You can read more about git clone operation, the Clone function and how to clone a repository here: <a href=\"https:\/\/gitprotect.io\/blog\/git-backup-or-git-clone-that-is-the-question\/\">Git clone vs backup<\/a>.<\/p>\n\n\n\n<p><em><em>Fork<\/em><\/em>, on the other hand, differs in that it copies the entire repository, so to say, you create forked repositories, but on the server-side! And then this copy can be cloned and worked on it, completely separate and independent of the basic project. Powerful functionality. Wondering where the name&nbsp;Fork&nbsp;came from? The copies we create in this way can be visualized as a fork. Anyway, just look at the icon for this option in GitHub:&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/kpHgRaFlBbJMMyl9LcSOV4bOLz4s0nPAzZ9a--mwpHeRdh2lJCzvp_HPMf57KVKeV0e-Stdx-DzQ2-WrW8HqJW0v73R_niHTvdkkqlv9wkXx72sIpFz4hCBDkJgpKwQYTXeAUE0\" alt=\"Fork workflow\" style=\"width:136px;height:52px\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"how-does-forking-work\">How does forking work<\/h2>\n\n\n\n<p>It doesn&#8217;t matter who, where, and how manages the base project,&nbsp;<strong>if it is possible to&nbsp;<em>fork&nbsp;<\/em>a repo, that&nbsp;<em>fork&nbsp;<\/em>is entirely yours<\/strong>. You don&#8217;t have to worry about permissions or accesses. You can treat such a&nbsp;<em>fork&nbsp;<\/em>as your own public repo in your namespace. So where is magic? With this feature, you can easily synchronize your work between two seemingly separate git repositories! Let us consider a small example:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/SWbRJKrEOj9PVjHVckwfcvjydU1JV7XZ8HHxGt669JFzn63z3muu4HEzk1-Q8OcM_1zCHL2Z-Eb6USKRpp4YGK52uW19wKMMin8jDslYn6xXqxDgKZdiK7YmOm3iBX84MjnN4rs\" alt=\"example of forking in git\" style=\"width:-14px;height:-2px\"\/><\/figure><\/div>\n\n\n<p><strong><strong>original\/niceRepo<\/strong>&nbsp;<\/strong>stands for the name of the repository in the given namespace. This is a representation of the public repository that we want to make some changes too, but not having any permissions to it. So we use the&nbsp;<em>fork&nbsp;<\/em>option and create a copy, this time in our namespace \u2013<strong>&nbsp;<strong>myNamespace\/niceRepo<\/strong>. <\/strong>We clone our own repository, make changes locally, push, and finally, we come to the point. At the moment, we can perform a Pull Request between our repository and the original one. If we do this, the project owner will receive a notification that someone wants to make changes, and then it depends on him or her whether our change will be accepted or not. It is important that such Pull Request allows for code review and discussion on the proposed changes, just like in the case of a typical PR. Now let&#8217;s briefly discuss how it works on different platforms.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fork-in-gitlab\"><strong>Fork in GitLab<\/strong><\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/xo3OCoNCEmacOnjD3RJwc6k9olzJX58f9ys3FHbBe4_CMwqYiXckcG7pSgd-i4S_sqhXBy4fMjLaUp0mEJWHSpirlY2fiHhnXGiU-bnNUqfQZABb-C5SjVJ0BXWCaGBz9lXGClI\" alt=\"Fork in GitLab\" style=\"width:714px;height:112px\"\/><figcaption class=\"wp-element-caption\"><em>Source: <a href=\"https:\/\/docs.gitlab.com\/ee\/user\/project\/repository\/forking_workflow.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">GitLab documentation<\/a><\/em><\/figcaption><\/figure><\/div>\n\n\n<p>It is always worth looking at the official documentation, I encourage you to do so because in this case, GitLab describes the process very easily. In short, the whole operation is to find the project we are interested in<strong>, click the\u00a0<em>fork\u00a0<\/em>option (in the upper right corner, as in the picture above)<\/strong>, then select our namespace in which we want to make a copy and it&#8217;s ready. Importantly, GitLab encourages us to use repository mirroring. I also recommend that you do this, this option will allow you to automatically sync changes from the original repo with our copy. Beware of the naming convention, because GitLab uses\u00a0<a href=\"https:\/\/gitprotect.io\/blog\/merge-vs-rebase-ways-to-combine-changes-in-git\/\" target=\"_blank\" rel=\"noreferrer noopener\">Merge<\/a>\u00a0Request, not Pull Request, as in GitHub.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p class=\"has-text-align-left\" style=\"font-size:22px\">How secure are your repos and metadata? Don&#8217;t push luck &#8211; <strong>secure your code with the first professional GitHub, Bitbucket, and GitLab backup<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button align=&quot;center&quot;\"><a class=\"wp-block-button__link has-background wp-element-button\" href=\"https:\/\/gitprotect.io\/sign-up.html\" style=\"border-radius:50px;background-color:#ff0300\" target=\"_blank\" rel=\"noreferrer noopener\">Start 14 days free GitProtect trial<\/a><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fork-in-github\"><strong>Fork in GitHub<\/strong><\/h3>\n\n\n\n<p>And since I mentioned GitHub, I will tell you immediately how it works in this service. The actual execution of&nbsp;<em>fork&nbsp;<\/em>works almost identically, so I won&#8217;t describe it. However, the main difference is that GitHub by default does not provide the option of automatic synchronization between our and the original repository. It is true that we have a button that allows us to do it manually, but it is a downside to the competing platform. On the other hand, it must be admitted that the GitHub documentation describes very clearly how we can deal with this and easily synchronize our local copy to be up to date with the original repo all the time.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fork-in-bitbucket\"><strong>Fork in Bitbucket<\/strong><\/h3>\n\n\n\n<p>While the GitHub and GitLab web interfaces are quite similar to each other, Bitbucket differs significantly from them. Repository forking is no exception. While this option is still in the upper right corner, after opening the repository we are interested in, there is no well-known \u201cfork\u201d icon there. We need to open the drop-down menu and&nbsp;<strong>select the \u201cFork this repository\u201d option<\/strong>&nbsp;there, as shown in the image below:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/UVENTZxz4qfmXcJMzu5eMT-MLYD0OLeoT_MR087mvVNMPL7o-FTPjsZgaS4w8QW3DeeoATBs_6Bwbvx_UbFm3ttoNZiGUR5Vd89zx2M78V7Pr3n5YwF00azVHDeCVqrg1ilxrvk\" alt=\"Fork in Bitbucket\"\/><\/figure><\/div>\n\n\n<p>Bitbucket also allows us to check the \u201cPrivate repository\u201d option. Apart from the obvious consequences of this decision, there is also one less clear matter here. Namely<strong>, the&nbsp;<em>fork&nbsp;<\/em>in Bitbucket by default inherits permissions for users<\/strong>&nbsp;\/ groups and there may be a problem with the limit on our Bitbucket plan. Checking this option allows us to bypass this limitation.<\/p>\n\n\n\n<p>Also, just like on GitHub, we have here a button available to sync changes between the original repo and our copy. The important thing is that the sync only happens between main branches, although we can also manually select a different branch, another feature branch.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"forking-workflow\"><strong>Forking workflow<\/strong><\/h2>\n\n\n\n<p>We already know what&nbsp;<em>fork&nbsp;<\/em>is, we also know how to create our own on three popular platforms. Now I will talk about how to properly work with its use and deliver changes to the original repository. In fact, I mentioned it at the beginning, but I didn&#8217;t say it&#8217;s a formalized process called Forking Workflow. We&#8217;ll talk about the different ways of working with Git another time, now just a few words in relation to today&#8217;s topic.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/gitprotect.io\/sign-up.html\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2022\/03\/LinkedIn-ads-template-1024x536.png\" alt=\"Get free trial\" class=\"wp-image-2555\" style=\"width:512px;height:268px\" srcset=\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2022\/03\/LinkedIn-ads-template-1024x536.png 1024w, https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2022\/03\/LinkedIn-ads-template-300x157.png 300w, https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2022\/03\/LinkedIn-ads-template-768x402.png 768w, https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2022\/03\/LinkedIn-ads-template-400x209.png 400w, https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2022\/03\/LinkedIn-ads-template.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n<p><strong><strong>The main advantages of git fork workflow are two things<\/strong>&nbsp;<\/strong>\u2013 branched flow, where everyone works on their own copy, and above all the fact that only the project maintainer can push to the original repo, so any changes have to go through their hands. Why is this an advantage? Because it is a control mechanism. It is the creator of the original design that decides what will be in the codebase and what will not. No matter how beautiful and functional the code someone wants to include is, it is the maintainer who decides whether that code will be there.<\/p>\n\n\n\n<p>Another advantage is that at some stage of the project, it can be split into two (or more) separate ones. For example, due to differences in development plans among maintainers, or because of the desire to create a commercial solution based on the existing one. Of course, there are still licensing issues here, but we will not deal with that now.<\/p>\n\n\n\n<p>Forking Workflow is very similar to Git Workflow (which I will tell you about the other day), but instead of dedicated branches, we have a dedicated, separate repo that is a copy of the original. Let&#8217;s go back to the example and the picture from the beginning of the article:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/SWbRJKrEOj9PVjHVckwfcvjydU1JV7XZ8HHxGt669JFzn63z3muu4HEzk1-Q8OcM_1zCHL2Z-Eb6USKRpp4YGK52uW19wKMMin8jDslYn6xXqxDgKZdiK7YmOm3iBX84MjnN4rs\" alt=\"\" style=\"width:728px;height:148px\"\/><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>we have a public repository called original\/niceRepo<\/li>\n\n\n\n<li>we make its <em>fork <\/em>called myNamespace\/niceRepo<\/li>\n\n\n\n<li>this is entirely our copy of the original repo which we clone locally<\/li>\n\n\n\n<li>we introduce changes as in normal work with Git<\/li>\n\n\n\n<li>only when our changes are in the main branch of our <em>fork<\/em>, we do PR\/MR to the original repo<\/li>\n\n\n\n<li>the maintainer decides whether our changes will be applied<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"is-the-use-of-forks-popular\"><strong>Is the use of <\/strong><strong><em>forks <\/em><\/strong><strong>popular?<\/strong><\/h3>\n\n\n\n<p>If you&#8217;ve reached this point, then you should know enough to be able to create your first&nbsp;<em>fork<\/em>. We still have a remaining question \u2013 what for? Well, it is a common practice in Open Source projects. If we want to co-develop such a project, this is how we have to do it. It&#8217;s not art for art&#8217;s sake at all, it&#8217;s a popular thing in the IT world.<\/p>\n\n\n\n<p>Perhaps the most famous example here will be Red Hat Linux. The project was split into two branches, two&nbsp;<em>forks&nbsp;<\/em>\u2013 an Open Source project called Fedora, and a paid one \u2013 Red Hat Enterprise Linux. Both projects operate dynamically to this day, although almost 20 years have passed since this division.&nbsp;<\/p>\n\n\n\n<p>Another famous example \u2013 Bootstrap, which currently has almost 74k&nbsp;<em>forks<\/em>. As you can see, the topic of Open Source projects is alive and present among developers. So,&nbsp;<strong>the mechanism of creating&nbsp;<em>forks&nbsp;<\/em>is important and still being developed on the side of popular hosting services<\/strong>, even though the Git engine itself does not have such an option.<\/p>\n\n\n\n<p>If we start creating our own public repositories or creating forks, we must also remember about the appropriate backup. I recommend reading this article: \u00a0<a href=\"https:\/\/gitprotect.io\/blog\/restoring-a-deleted-repository-in-github-and-bitbucket\/\" target=\"_blank\" rel=\"noreferrer noopener\">Restore deleted repository<\/a>. There is such a thing as\u00a0<strong><em>git network<\/em><\/strong>, if we use the\u00a0<em>fork\u00a0<\/em>option, we should also know what the consequences are of removing a repo that belongs to such a network. Without this knowledge, we may be unpleasantly surprised and this is the last thing we want to meet without having a backup.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recently I was talking to my friend about Open Source projects. That was a lively debate and we wondered about how to cooperate in such projects, of course from the technical point of view. How are they stored, how can you contribute to their development, and finally \u2013 who and how controls what the community adds to such a project. This inspired me to describe a mechanism called forking in Git because a lot of people have heard of it, but when you need to delve into the details, it turns out that not everything is so obvious. Let&#8217;s check [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":1982,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,2,3],"tags":[],"class_list":["post-1979","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bitbucket","category-git-backup-101","category-github","post--single"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Git Forking Workflow - Blog | GitProtect.io<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Git Forking Workflow - Blog | GitProtect.io\" \/>\n<meta property=\"og:description\" content=\"Recently I was talking to my friend about Open Source projects. That was a lively debate and we wondered about how to cooperate in such projects, of course from the technical point of view. How are they stored, how can you contribute to their development, and finally \u2013 who and how controls what the community adds to such a project. This inspired me to describe a mechanism called forking in Git because a lot of people have heard of it, but when you need to delve into the details, it turns out that not everything is so obvious. Let&#8217;s check [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog | GitProtect.io\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/XoperoSoftware\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-07T10:38:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-22T12:48:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomasz Lisowski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GitProtectio\" \/>\n<meta name=\"twitter:site\" content=\"@GitProtectio\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomasz Lisowski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/\"},\"author\":{\"name\":\"Tomasz Lisowski\",\"@id\":\"https:\/\/gitprotect.io\/blog\/#\/schema\/person\/9437be55e0e82150a20247f63e2fef79\"},\"headline\":\"Git Forking Workflow\",\"datePublished\":\"2021-07-07T10:38:42+00:00\",\"dateModified\":\"2023-11-22T12:48:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/\"},\"wordCount\":1609,\"publisher\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png\",\"articleSection\":[\"Bitbucket\",\"Git Backup 101\",\"GitHub\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/\",\"url\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/\",\"name\":\"Git Forking Workflow - Blog | GitProtect.io\",\"isPartOf\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png\",\"datePublished\":\"2021-07-07T10:38:42+00:00\",\"dateModified\":\"2023-11-22T12:48:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#primaryimage\",\"url\":\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png\",\"contentUrl\":\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png\",\"width\":1200,\"height\":600,\"caption\":\"Git forking workflow\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/gitprotect.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git Forking Workflow\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/gitprotect.io\/blog\/#website\",\"url\":\"https:\/\/gitprotect.io\/blog\/\",\"name\":\"GitProtect.io Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/gitprotect.io\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/gitprotect.io\/blog\/#organization\",\"name\":\"GitProtect.io\",\"url\":\"https:\/\/gitprotect.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gitprotect.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2023\/05\/favicon-528x528-1.png\",\"contentUrl\":\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2023\/05\/favicon-528x528-1.png\",\"width\":528,\"height\":528,\"caption\":\"GitProtect.io\"},\"image\":{\"@id\":\"https:\/\/gitprotect.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/XoperoSoftware\/\",\"https:\/\/x.com\/GitProtectio\",\"https:\/\/www.linkedin.com\/company\/xopero-software\/\",\"https:\/\/www.youtube.com\/channel\/UCiEnl6n0mIO6w7twccz-l2w\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/gitprotect.io\/blog\/#\/schema\/person\/9437be55e0e82150a20247f63e2fef79\",\"name\":\"Tomasz Lisowski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gitprotect.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2023\/05\/tomasz-lisowski_avatar-96x96.jpg\",\"contentUrl\":\"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2023\/05\/tomasz-lisowski_avatar-96x96.jpg\",\"caption\":\"Tomasz Lisowski\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/tomasz-lisowski-01366a75\/\"],\"url\":\"https:\/\/gitprotect.io\/blog\/author\/tomasz-lisowski\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Git Forking Workflow - Blog | GitProtect.io","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/","og_locale":"en_US","og_type":"article","og_title":"Git Forking Workflow - Blog | GitProtect.io","og_description":"Recently I was talking to my friend about Open Source projects. That was a lively debate and we wondered about how to cooperate in such projects, of course from the technical point of view. How are they stored, how can you contribute to their development, and finally \u2013 who and how controls what the community adds to such a project. This inspired me to describe a mechanism called forking in Git because a lot of people have heard of it, but when you need to delve into the details, it turns out that not everything is so obvious. Let&#8217;s check [&hellip;]","og_url":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/","og_site_name":"Blog | GitProtect.io","article_publisher":"https:\/\/www.facebook.com\/XoperoSoftware\/","article_published_time":"2021-07-07T10:38:42+00:00","article_modified_time":"2023-11-22T12:48:25+00:00","og_image":[{"width":1200,"height":600,"url":"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png","type":"image\/png"}],"author":"Tomasz Lisowski","twitter_card":"summary_large_image","twitter_creator":"@GitProtectio","twitter_site":"@GitProtectio","twitter_misc":{"Written by":"Tomasz Lisowski","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#article","isPartOf":{"@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/"},"author":{"name":"Tomasz Lisowski","@id":"https:\/\/gitprotect.io\/blog\/#\/schema\/person\/9437be55e0e82150a20247f63e2fef79"},"headline":"Git Forking Workflow","datePublished":"2021-07-07T10:38:42+00:00","dateModified":"2023-11-22T12:48:25+00:00","mainEntityOfPage":{"@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/"},"wordCount":1609,"publisher":{"@id":"https:\/\/gitprotect.io\/blog\/#organization"},"image":{"@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#primaryimage"},"thumbnailUrl":"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png","articleSection":["Bitbucket","Git Backup 101","GitHub"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/","url":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/","name":"Git Forking Workflow - Blog | GitProtect.io","isPartOf":{"@id":"https:\/\/gitprotect.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#primaryimage"},"image":{"@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#primaryimage"},"thumbnailUrl":"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png","datePublished":"2021-07-07T10:38:42+00:00","dateModified":"2023-11-22T12:48:25+00:00","breadcrumb":{"@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gitprotect.io\/blog\/git-forking-workflow\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#primaryimage","url":"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png","contentUrl":"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2021\/07\/fork.png","width":1200,"height":600,"caption":"Git forking workflow"},{"@type":"BreadcrumbList","@id":"https:\/\/gitprotect.io\/blog\/git-forking-workflow\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/gitprotect.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Git Forking Workflow"}]},{"@type":"WebSite","@id":"https:\/\/gitprotect.io\/blog\/#website","url":"https:\/\/gitprotect.io\/blog\/","name":"GitProtect.io Blog","description":"","publisher":{"@id":"https:\/\/gitprotect.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gitprotect.io\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/gitprotect.io\/blog\/#organization","name":"GitProtect.io","url":"https:\/\/gitprotect.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gitprotect.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2023\/05\/favicon-528x528-1.png","contentUrl":"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2023\/05\/favicon-528x528-1.png","width":528,"height":528,"caption":"GitProtect.io"},"image":{"@id":"https:\/\/gitprotect.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/XoperoSoftware\/","https:\/\/x.com\/GitProtectio","https:\/\/www.linkedin.com\/company\/xopero-software\/","https:\/\/www.youtube.com\/channel\/UCiEnl6n0mIO6w7twccz-l2w"]},{"@type":"Person","@id":"https:\/\/gitprotect.io\/blog\/#\/schema\/person\/9437be55e0e82150a20247f63e2fef79","name":"Tomasz Lisowski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gitprotect.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2023\/05\/tomasz-lisowski_avatar-96x96.jpg","contentUrl":"https:\/\/gitprotect.io\/blog\/wp-content\/uploads\/2023\/05\/tomasz-lisowski_avatar-96x96.jpg","caption":"Tomasz Lisowski"},"sameAs":["https:\/\/www.linkedin.com\/in\/tomasz-lisowski-01366a75\/"],"url":"https:\/\/gitprotect.io\/blog\/author\/tomasz-lisowski\/"}]}},"_links":{"self":[{"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/posts\/1979","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/comments?post=1979"}],"version-history":[{"count":8,"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/posts\/1979\/revisions"}],"predecessor-version":[{"id":4553,"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/posts\/1979\/revisions\/4553"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/media\/1982"}],"wp:attachment":[{"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/media?parent=1979"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/categories?post=1979"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gitprotect.io\/blog\/wp-json\/wp\/v2\/tags?post=1979"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}