 Hi, my name is Nero Slavsuki. I'm an employee of Red Hat and a Fedora contributor. Today, I want to show you what this Git is. The name, this Git, is a portmante of two words, distribution and Git. This Git is a Git with additional data storage. It is designed to hold content of source RPMs and consists of three main components. Git repositories look as high cash to store source starballs and scripts to manage both. Let's see how does it work. RPM source package typically contains a spec file and the sources. Source starballs, ping binary and potentially large, are not very well suited to be placed in Git repository. On each starball update, it would produce a huge, meaningless Git. In this Git, when you import a source RPM file, only spec file and patches are stored in a Git. Starballs are put aside in a things we call lookaside cache. Lookaside cache is a very simple web server which can store binary blocks based on their name and checksum. Hey, wait a moment, that sounds familiar, like Git LFS, Git large file storage. Yes, you are right. It is very similar and it does the same thing. This Git is actually older. It was originally named this CVS and existed long time before both Git and Git LFS were invented. When Git has become popular, we swapped CVS to Git and that's it. No one had the courage to migrate to Git LFS because this Git is integrated in many, many infrastructure components. Now, let's move the computer to show you how you can work with this Git. The primary client tool for this Git is FedPakG. You can run FedPakG without any option and you get nice whole page. When you finish your initial package review and that task I will explain in a different video, you have to request the new repository. It is done by running FedPakG request repo, name of the package and bugzilla number. The bugzilla with the package review has to have flag FedoraReview set to class. When the repository is created, you can clone it. I'm going to clone bash repository. If you want to just play with it, you can clone it as an anonymous user. You can see that this is, in fact, a normal Git repository. You can Git log, Git show, Git pull. And as you can see that the Git repository contains a spec file and patches. In fact, a bunch of patches here. It can even contain small sources file. The spec file contains references to several small sources which are, in fact, small text files. So no problem having them in Git repository. But the big trouble is not here. We have here special fire sources, which contains the name of the file, the checksum and the type of the checksum. The trouble itself resides in the lookaside cache. It can be retrieved using command FedPakG sources. It is downloaded to the current directory, but it is never part of the Git because FedPakG automatically puts the file in Git ignore. When you want to do a local build, you can either run FedPakG local build or you can run FedPakG mock build. The first one runs simple RPM build. I recommend the later because it runs the built-in mock which prepares the correct build environment and runs an isolated setup. I terminate it now. But you can see that it runs the built-in Fedora row height, which is right now Fedora 36, even though my workstation is running Fedora 34 now. How FedPakG knows the version of the Fedora? Because of the branches. Row height and main, which is in fact just alias to row height, builds for Fedora row height, branch Fedora 35, build to Fedora 35, etc. If you want to build your package to row height and Fedora 35, you have to do your changes in row height branch, build it and then switch to Fedora 35. Do the changes there again and then build it again to Koji. But thankfully to Git, you can Git merge, Git cherry pick, what do you want? You build your package using FedPakG build, which submits your build to Koji, which is the main build system for Fedora. And you can see it on address koji fedoraproject.org. Here you can see the latest build and you can see the artifacts and the logs of the build. I repeat again, you have to run this command in each branch for which you want to have the package build. The command FedPakG build does not allow you to build your package if your changes are not committed and not pushed to the remote. And you are not allowed to do Git force push to prevent you from changing the history. But you can do Git revert as many times as you wish. When you build the package for the row height, then it automatically appears in the distribution in the next Composite. Usually the next day. For released Fedoras, you need to file an update using FedPakG update or using web application, but more about it in next video. And I didn't show you how to upload a new version of your package to this Git. You can either do it manually, edit the spec file and don't forget to bump release and add a change log entry. You can utilize RPMDef, BumpSpec, BashSpec for that and then upload newTurbo using FedPakG newSources.exe. This will upload the file to LocositeCache and modify sources and Git ignore. Or you can FedPakG import BashSourceRPM This will extract sources, patches and the spec file from sourceRPM and upload the turbo to LocositeCache. Again, don't forget to do that in all branches where you want to have the change. Before you push it to the remote E, you have to have a Kerberz ticket which you can get using command FKINIT. Don't forget that you can have only one Kerberz ticket at the same time. If your company use Kerberz 2, you may prefer to do your packaging in virtual machine where you will have to second Kerberz ticket. Or if you package only occasionally, you can KaDestroy your company ticket and get the Federa ticket using FKINIT. And when you are done, you restore your company Kerberz ticket back. For your own comfort, you can tag your commits using FedPakG tag or Git tag or even better FedPakG tag-c which will tag it using name and version. But that is just for you because it doesn't use that tag at all. That's all. Later you may find that there exist some other tools which easy to work with this Git. I will leave that for some other day and another video. That's all for now. Bye-bye.