From b2d80610db6beda38573890ed169815e495bc663 Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Sun, 24 May 2020 16:34:31 +0700 Subject: [usth/ICT2.7] Engineer software --- .../12 - GIT Workflow - lang_en_vs5.srt | 507 +++++++++++++++++++++ 1 file changed, 507 insertions(+) create mode 100644 usth/ICT2.7/P1L4 Version Control Subtitles/12 - GIT Workflow - lang_en_vs5.srt (limited to 'usth/ICT2.7/P1L4 Version Control Subtitles/12 - GIT Workflow - lang_en_vs5.srt') diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/12 - GIT Workflow - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/12 - GIT Workflow - lang_en_vs5.srt new file mode 100644 index 0000000..84f0f2e --- /dev/null +++ b/usth/ICT2.7/P1L4 Version Control Subtitles/12 - GIT Workflow - lang_en_vs5.srt @@ -0,0 +1,507 @@ +1 +00:00:00,070 --> 00:00:02,100 +But before jumping into the demo I would like + +2 +00:00:02,100 --> 00:00:05,370 +to give a high level overview of the GIT workflow, + +3 +00:00:05,370 --> 00:00:08,420 +which will help you better, following the demo. So let + +4 +00:00:08,420 --> 00:00:12,480 +me start by representing four fundamental elements in the GIT + +5 +00:00:12,480 --> 00:00:15,640 +workflow which are these four: the workspace which is your + +6 +00:00:15,640 --> 00:00:19,980 +local directory. The index, also called the stage, and we'll + +7 +00:00:19,980 --> 00:00:22,470 +see in a minute what the index is. Then, we + +8 +00:00:22,470 --> 00:00:25,380 +have the local repository. We'll also refer to this as + +9 +00:00:25,380 --> 00:00:27,910 +HEAD in the, when we explain the different commands + +10 +00:00:27,910 --> 00:00:31,340 +and then, the word flow. And finally, the remote repository. + +11 +00:00:31,340 --> 00:00:34,600 +If you consider a file in your work space it + +12 +00:00:34,600 --> 00:00:37,860 +can be in three possible states. It can be committed + +13 +00:00:37,860 --> 00:00:40,170 +which means that the data, the latest changes to the + +14 +00:00:40,170 --> 00:00:45,030 +file are safely stored here. It could be modified, which + +15 +00:00:45,030 --> 00:00:47,840 +is the case of the file being changed and no, + +16 +00:00:47,840 --> 00:00:50,710 +none of these changes being saved to the local repository + +17 +00:00:50,710 --> 00:00:54,440 +so locally modified or it can be staged. And + +18 +00:00:54,440 --> 00:00:58,270 +stage means that the file is basically part of this + +19 +00:00:58,270 --> 00:01:01,620 +index. And what that means, that it's been tagged + +20 +00:01:01,620 --> 00:01:04,890 +to be considered in the next commit. And I know + +21 +00:01:04,890 --> 00:01:08,070 +that this is not all 100% intuitive, so let's + +22 +00:01:08,070 --> 00:01:10,860 +look at that again by considering the actual workflow and + +23 +00:01:10,860 --> 00:01:12,680 +let's see what happens when you issue the different + +24 +00:01:12,680 --> 00:01:16,060 +commands in git. So the first command that you normally + +25 +00:01:16,060 --> 00:01:18,520 +run in case you, you're getting access to a remote + +26 +00:01:18,520 --> 00:01:21,940 +repository, is the git clone command. And the git clone, + +27 +00:01:21,940 --> 00:01:24,880 +followed by the url for that repository, will create a + +28 +00:01:24,880 --> 00:01:28,580 +local copy of the repository in your workspace. And of + +29 +00:01:28,580 --> 00:01:30,310 +course, you don't have to do this step if you're + +30 +00:01:30,310 --> 00:01:34,380 +creating the repository yourself. The next command that we already + +31 +00:01:34,380 --> 00:01:38,170 +saw is the command add. And what the command add + +32 +00:01:38,170 --> 00:01:41,130 +does is to add a file that is in the + +33 +00:01:41,130 --> 00:01:44,630 +workspace to this index. And we say that after that, the + +34 +00:01:44,630 --> 00:01:48,700 +file is staged. So it's marked to be committed, but not + +35 +00:01:48,700 --> 00:01:53,350 +yet committed. And here I'm just mentioning this minus u option. + +36 +00:01:53,350 --> 00:01:56,330 +If you specify the minus u option, you will also consider deleted + +37 +00:01:56,330 --> 00:01:58,820 +files File, but let's not get there for now, we'll talk + +38 +00:01:58,820 --> 00:02:01,240 +about that when we do the demo. As I said, if you + +39 +00:02:01,240 --> 00:02:03,720 +add the file, it just gets added to this index but + +40 +00:02:03,720 --> 00:02:06,430 +is not actually committed, so what you need to do, is to + +41 +00:02:06,430 --> 00:02:10,389 +commit the file, so when you execute git commit, all the + +42 +00:02:10,389 --> 00:02:13,970 +files that are staged, that are released it here, their changes + +43 +00:02:13,970 --> 00:02:17,080 +will be committed to the local repository. So your files, as + +44 +00:02:17,080 --> 00:02:18,970 +I was saying, they can be in three states. They will + +45 +00:02:18,970 --> 00:02:21,820 +go from the modified state to the stage state when you + +46 +00:02:21,820 --> 00:02:24,200 +execute the app. And then from the stage state to the + +47 +00:02:24,200 --> 00:02:27,510 +committed state when you perform a GIT Commit. Okay, so at + +48 +00:02:27,510 --> 00:02:31,780 +this point your changes are safely stored in the local repository. + +49 +00:02:31,780 --> 00:02:34,370 +Notice that you can also perform these two steps at + +50 +00:02:34,370 --> 00:02:38,150 +once by executing a Commit -a. So if you have + +51 +00:02:38,150 --> 00:02:40,920 +a set of modified files, and all these files are + +52 +00:02:40,920 --> 00:02:44,550 +already part of the repository, so they're already known to diversion + +53 +00:02:44,550 --> 00:02:47,540 +control system, you can simply execute a commit -a. + +54 +00:02:47,540 --> 00:02:50,040 +And what the commit -a command will do, it + +55 +00:02:50,040 --> 00:02:53,080 +will stage your file and then commit them. All at + +56 +00:02:53,080 --> 00:02:56,650 +once. So it's a convenient shortcut. Of course, as I said, + +57 +00:02:56,650 --> 00:02:58,710 +this will not work if the file is a new file. + +58 +00:02:58,710 --> 00:03:00,730 +So if a file is a new file, you have to manually add + +59 +00:03:00,730 --> 00:03:04,620 +it. Otherwise commit -a will just stage and commit at once. + +60 +00:03:04,620 --> 00:03:07,400 +As we discussed when we looked at the diffence between centralized + +61 +00:03:07,400 --> 00:03:10,520 +and decentralized version console system. We saw that in the case + +62 +00:03:10,520 --> 00:03:13,930 +of the decentralized, there is a local repository which is this one. + +63 +00:03:13,930 --> 00:03:17,190 +And then you have to explicitly push your changes to a remote + +64 +00:03:17,190 --> 00:03:21,850 +repository, and this is exactly what the git push command does. It pushes + +65 +00:03:21,850 --> 00:03:25,930 +your changes that are in the local repository to the remote repository + +66 +00:03:25,930 --> 00:03:28,160 +so at this point all of your changes will be + +67 +00:03:28,160 --> 00:03:31,680 +visible to anyone who has access to the remote repository. + +68 +00:03:31,680 --> 00:03:33,710 +Now, let's see the opposite flow so how does it + +69 +00:03:33,710 --> 00:03:36,640 +work when you're actually getting files from the repository instead + +70 +00:03:36,640 --> 00:03:39,650 +of committing files to the repository. So the first command + +71 +00:03:39,650 --> 00:03:43,280 +I want to mention is the get fetch command and + +72 +00:03:43,280 --> 00:03:46,900 +what the get fetch command does is to get files from + +73 +00:03:46,900 --> 00:03:50,680 +the remote repositories to your local repository, but not yet to + +74 +00:03:50,680 --> 00:03:53,890 +your working directory. And we will see what is the usefullness of + +75 +00:03:53,890 --> 00:03:56,900 +doing this operation. Of having the files all in the local respository, + +76 +00:03:56,900 --> 00:03:59,380 +but not in your local directory. So, what that means, just to + +77 +00:03:59,380 --> 00:04:01,360 +make sure that we're on the same page. Is that you + +78 +00:04:01,360 --> 00:04:05,620 +will not see these files when you workspace. You will still have + +79 +00:04:05,620 --> 00:04:09,030 +your local files here. So this is sort of a physical distinction. + +80 +00:04:09,030 --> 00:04:12,060 +In order to get your data files from the local repositories to + +81 +00:04:12,060 --> 00:04:14,470 +your workspace you have to issue another command. Which is + +82 +00:04:14,470 --> 00:04:18,250 +the command git merge. Git merge will take the changes in + +83 +00:04:18,250 --> 00:04:21,870 +local repository and get them to your local workspace. So at + +84 +00:04:21,870 --> 00:04:25,460 +this point your files will be updated. To what is in + +85 +00:04:25,460 --> 00:04:27,730 +the remote reposity. Or at least what was in the + +86 +00:04:27,730 --> 00:04:30,810 +remote reposity at the time of the fetch. SImilarly to what + +87 +00:04:30,810 --> 00:04:34,340 +happened for the add and commit. There's a shortcut which is + +88 +00:04:34,340 --> 00:04:37,230 +the command git pull. So in case you want to get + +89 +00:04:37,230 --> 00:04:40,590 +the changes directly. To your work space with a single + +90 +00:04:40,590 --> 00:04:44,120 +command, you can issue a git pull command and what will + +91 +00:04:44,120 --> 00:04:46,560 +happen, is that the changes will get collected from the + +92 +00:04:46,560 --> 00:04:49,810 +remote repository and they will go to your local repository and + +93 +00:04:49,810 --> 00:04:51,990 +to your work space, at once. So this has the + +94 +00:04:51,990 --> 00:04:55,820 +same affect as performing a git fetch and a git merge. + +95 +00:04:55,820 --> 00:04:59,160 +So if we can do everything in one command, why, + +96 +00:04:59,160 --> 00:05:03,290 +why we want to fetch and berch as two separate operations? + +97 +00:05:03,290 --> 00:05:05,920 +So one of the reason is because this allows us + +98 +00:05:05,920 --> 00:05:09,410 +to compare files before we actually get the latest version + +99 +00:05:09,410 --> 00:05:12,600 +of the files. In particular, I can run the command + +100 +00:05:12,600 --> 00:05:17,310 +git diff head to get the difference between my local files, + +101 +00:05:17,310 --> 00:05:20,330 +the files in my working directory, and the files in + +102 +00:05:20,330 --> 00:05:22,800 +my local repository. So what I can do, I can + +103 +00:05:22,800 --> 00:05:25,550 +fetch the files from the remote repository, and once I + +104 +00:05:25,550 --> 00:05:29,260 +fetch these files. I can run a git diff head and + +105 +00:05:29,260 --> 00:05:32,620 +check what the differences are. And based on the differences decide + +106 +00:05:32,620 --> 00:05:35,554 +whether I want to merge or not. So while we are talking about + +107 +00:05:35,554 --> 00:05:37,890 +git diff, there is something else that you can use with the + +108 +00:05:37,890 --> 00:05:41,060 +diff command. So what you can do, you can run git diff + +109 +00:05:41,060 --> 00:05:44,930 +without further specifying head. In this case, what the command tell you + +110 +00:05:44,930 --> 00:05:48,310 +is the difference between the files that you have in your work + +111 +00:05:48,310 --> 00:05:51,780 +space and the ones that are staged for a commit. So basically, + +112 +00:05:51,780 --> 00:05:54,630 +what it will be telling you, is that what you could still + +113 +00:05:54,630 --> 00:05:58,300 +add to the stage for the further commit, and that you + +114 +00:05:58,300 --> 00:06:01,230 +haven't already. So what local changes will not make it to the + +115 +00:06:01,230 --> 00:06:04,440 +next commit, basically. And this you can use, for example, as + +116 +00:06:04,440 --> 00:06:07,450 +a sanity check before doing a commit to make sure all the + +117 +00:06:07,450 --> 00:06:09,980 +local changes that you have, and that you want to commit, + +118 +00:06:09,980 --> 00:06:13,230 +are actually staged and therefore will be considered. So now we will + +119 +00:06:13,230 --> 00:06:16,930 +cover all of the commands that we saw here. In our practical + +120 +00:06:16,930 --> 00:06:20,560 +demo. But please feel free to refer back to this Git Workflow + +121 +00:06:20,560 --> 00:06:23,570 +to get a kind of a high level vision. Or maybe you want to keep it next to + +122 +00:06:23,570 --> 00:06:26,110 +you, because this really gives you the overall structure + +123 +00:06:26,110 --> 00:06:28,450 +and the overall view of what happens when you + +124 +00:06:28,450 --> 00:06:31,160 +run the different commands. And it also helps you + +125 +00:06:31,160 --> 00:06:34,840 +visualize The different elements that are relevant when you're + +126 +00:06:34,840 --> 00:06:37,970 +using GIT. So the workspace, once more, the index + +127 +00:06:37,970 --> 00:06:40,790 +or stage, the local repository, and the remote repository. -- cgit 1.4.1