Τι είναι το GitHub; Τι είναι το Git; Και πώς να χρησιμοποιήσετε αυτά τα εργαλεία προγραμματιστή.

Τα πρώτα προγράμματα που γράφετε πιθανώς δεν θα είναι πολύ εντυπωσιακά. Θα κάνετε πολλά λάθη και δεν θα θέλετε ποτέ να ξαναεπισκεφτείτε το παρελθόν.

Αλλά σύντομα, θα γράφετε μεγάλα, περίπλοκα προγράμματα. Ίσως θα διαγράψετε κάποια πράγματα τώρα που θέλετε να επαναφέρετε αργότερα. Ή ίσως θα φέρετε έναν φίλο για βοήθεια και θέλετε να προσθέσετε με χαρά τις αλλαγές του στο πρόγραμμά σας ενώ συνεχίζετε να εργάζεστε στα μέρη σας.

Εκεί έρχεται ο έλεγχος της έκδοσης και είναι μια δεξιότητα που κάθε εργοδότης θα περιμένει από εσάς να αποκτήσετε. Είναι επίσης εξαιρετικά χρήσιμο για όσους εργάζονται σε οτιδήποτε αποθηκεύεται σε κομμάτια - από ένα πρόγραμμα υπολογιστή έως μια συνταγή σε ένα μυθιστόρημα.

Τι είναι ο έλεγχος έκδοσης;

Ο έλεγχος έκδοσης αναφέρεται στη δυνατότητα αποθήκευσης της θέσης σας σε έγγραφο ή φάκελο και αναφορά προηγούμενων αποθηκεύσεων.

Καθώς γράφω αυτό το άρθρο, οι νεότερες αλλαγές μου αντικαθιστούν συνεχώς τις προηγούμενες εκδόσεις μου. Δεν είναι έλεγχος έκδοσης, γιατί δεν μπορώ να επιστρέψω στο προσχέδιο που είχα πριν από μια εβδομάδα. Αλλά αν το έγραψα χρησιμοποιώντας το Git, αυτό θα ήταν δυνατό.

Τι είναι το Git;

Το Git είναι ένα σύστημα ελέγχου εκδόσεων που αναπτύχθηκε από τον Linus Torvalds το 2005 (ο ίδιος τύπος που έγραψε Linux). Το Git βοηθά τους προγραμματιστές να παρακολουθούν την κατάσταση του κώδικα και επιτρέπει τη συνεργασία σε μια βάση κώδικα. Θα εξετάσουμε τα κύρια στοιχεία λίγο αργότερα.

Αν θέλετε να ακολουθήσετε, θα πρέπει να έχετε εγκαταστήσει το Git στον υπολογιστή σας. Ανοίξτε ένα τερματικό και πληκτρολογήστε git. Εάν δείτε μια λίστα πιθανών εντολών, μπορείτε να πάτε!

Πολλοί υπολογιστές έρχονται με το Git ήδη εγκατεστημένο. Εάν πρέπει να εγκαταστήσετε, μπορείτε να ακολουθήσετε τις οδηγίες εδώ για τον υπολογιστή σας.

Χρησιμοποιώντας το Git

Εάν έχετε χρησιμοποιήσει ποτέ ένα πρόγραμμα υπολογιστή ή ένα βιντεοπαιχνίδι και έχετε παρατηρήσει ότι μπορείτε να επιστρέψετε σε μια προηγούμενη αποθηκευμένη έκδοση, κατανοείτε εγγενώς την ανάγκη για το Git. Απλώς αποθηκεύει ένα στιγμιότυπο του προγράμματος σας εγκαίρως.

Αλλά αντί να χρειάζεται να παρακολουθείτε κάθε γραμμή κώδικα στο πρόγραμμά σας, σημειώνει τις αλλαγές μεταξύ του κώδικα που έχετε τώρα και την τελευταία φορά που αποθηκεύσατε. Διατηρεί μια τρέχουσα σημείωση για το πότε κάθε γραμμή κώδικα αποθηκεύτηκε τελευταία και τις αποθηκεύει σε έναν ειδικό κρυφό φάκελο.

Ας εξετάσουμε αυτό το πρόγραμμα JavaScript. Εκτυπώνει τρεις γραμμές στην κονσόλα (μια έξοδος που μπορείτε να δείτε στο πρόγραμμα περιήγησης ή στο τερματικό σας):

console.log('Hello, this is a git example!') console.log('And here is another!') console.log('And yet a third') 

git init

Αν θέλω να αποθηκεύσω εκδόσεις της δουλειάς μου, μπορώ να χρησιμοποιήσω το Git. Πρώτα, θα πληκτρολογήσω git initτο τερματικό μου για να μπορέσω να αρχίσω να χρησιμοποιώ το Git. Αυτό θα δημιουργήσει ένα .gitφάκελο, όπου το Git θα αποθηκεύει τα αρχεία του.

git add

git add .θα προσθέσει όλα τα αρχεία στο πρόγραμμά μας. Εάν το κάνατε git initμετά τη δημιουργία ενός αρχείου ή οποιαδήποτε στιγμή δημιουργήσετε νέα αρχεία, θα πρέπει να πείτε στο Git να ξεκινήσει την παρακολούθηση αλλαγών σε αυτά με αυτήν την εντολή.

git δεσμεύω

Στη συνέχεια, θα πληκτρολογήσω git commit -am "Initial commit". git commitείναι η εντολή για αποθήκευση μιας έκδοσης του κώδικα μας. Το -amλεγόμενο "flag" και σηματοδοτεί ότι υπάρχουν προαιρετικές ενέργειες που θα θέλαμε να κάνουμε με αυτήν τη δέσμευση. Η σημαία aσημαίνει ότι θα αποθηκεύσουμε όλες τις αλλαγές μας. Η σημαία mυποδηλώνει ότι θα παράσχουμε ένα μήνυμα στη συνέχεια, δηλαδή "Initial commit".

Μπορείτε να γράψετε οτιδήποτε θέλετε εδώ - το freeCodeCamp έχει πολλά άρθρα σχετικά με τον τρόπο σύνταξης μεγάλων μηνυμάτων δέσμευσης.

Πώς αποθηκεύει το Git τις αλλαγές

Εάν κάνουμε μια αλλαγή στο πρόγραμμά μας (όπως η αλλαγή του κειμένου στην πρώτη γραμμή), ίσως θέλουμε να αποθηκεύσουμε μια έκδοση. Θα μπορούσαμε να αλλάξουμε μεταξύ των εκδόσεων αν θέλαμε να δούμε πώς άλλαξε το πρόγραμμά μας με την πάροδο του χρόνου.

console.log('Now I have changed the first line.') console.log('And here is another!') console.log('And yet a third') 

git diff

Εδώ φαίνεται πώς τρέχετε git diff. Το Git θα σας δείξει τη διαφορά ανάμεσα στον κωδικό που έχετε τώρα και την τελευταία φορά που αποθηκεύτηκε.

Είναι λίγο δύσκολο να καταλάβουμε τι συμβαίνει εδώ, αλλά -είναι οι διαγραφές και οι +παρεμβάσεις. Καταργήσαμε το κείμενο "Γεια, αυτό είναι ένα παράδειγμα!" και πρόσθεσε το κείμενο "Τώρα έχω αλλάξει την πρώτη γραμμή." Έτσι το Git παρακολουθεί τι έχει αλλάξει μεταξύ των εκδόσεων.

diff --git a/git.js b/git.js index eb0f1d1..8dbf769 100644 --- a/git.js +++ b/git.js @@ -1,3 +1,3 @@ +console.log('Now I have changed the first line.') -console.log('Hello, this is a git example!') console.log('And here is another!') console.log('And yet a third')

Τώρα που έχουμε κριτική για τις αλλαγές που διαπράττουν, μπορούμε να προχωρήσουμε και να κάνουμε μια δεύτερη δεσμευτούν: git commit -am 'Update first console log'. Αυτό θα αποθηκεύσει τις αλλαγές που έκανα στην πρώτη γραμμή κειμένου.

git log

Μπορούμε να ελέγξουμε τις δεσμεύσεις που έχουμε κάνει με την εντολή git log. Εάν το τρέχω τώρα στο πρόγραμμά μου, λαμβάνω αυτήν την έξοδο:

commit 67627dd44e84a3106a18a19e94cf9f3723e59b3c (HEAD -> master) Author: amberwilkie  Date: Wed Apr 22 16:55:39 2020 -0400 Update first console log commit 49fe4152f474a9674a83e2b014a08828209d2690 Author: amberwilkie  Date: Wed Apr 22 16:54:59 2020 -0400 Initial commit

Βλέπουμε τα μηνύματα δέσμευσης, τον χρόνο που δεσμευτήκαμε και ένα μοναδικό αναγνωριστικό για τη δέσμευσή μας, το οποίο μπορούμε να χρησιμοποιήσουμε για να αναφέρουμε δεσμεύσεις στο μέλλον.

git ολοκλήρωση αγοράς

Εάν θέλαμε να επιστρέψουμε και να δούμε τις αλλαγές στον κώδικα μας από μια προηγούμενη δέσμευση, θα το κάνουμε με git checkout 49fe4152f474a9674a83e2b014a08828209d2690. Το Git θα θέσει τον κωδικό μας σε προσωρινή κατάσταση, ώστε να μπορούμε να δούμε πώς έμοιαζε ο κώδικας με αυτό το στιγμιότυπο εγκαίρως.

Αντιγράψαμε το αναγνωριστικό για την πρώτη μου δέσμευση. Αν εκτελέσω αυτήν την εντολή, το πρόγραμμά μου λέει "Γεια, αυτό είναι ένα παράδειγμα git!" στην πρώτη γραμμή.

Για να επιστρέψετε στον πιο πρόσφατο κωδικό, θα πληκτρολογήσετε git checkout master.

Κλαδια δεντρου

Εάν παρατηρήσατε παραπάνω, έπρεπε να πληκτρολογήσετε masterγια να επιστρέψετε στην τρέχουσα κατάσταση του κώδικα μας. Γιατί; Διότι masterείναι το προεπιλεγμένο όνομα για το υποκατάστημα των κλάδων - το μέρος όπου ο κωδικός μας είναι πιο ενημερωμένος.

Το Git βασίζεται στη διακλάδωση για να διατηρήσει τον κωδικό μας. Μπορείτε να λάβετε υπόψη masterτον κορμό του δέντρου κώδικα. Μπορείτε να διακόψετε και να κάνετε κάποιες αλλαγές, αλλά ο τελικός στόχος είναι πάντα να τις επαναφέρετε στον κορμό master.

You can use git checkout to make a new branch, not just to check out previous versions of your code. Try git checkout -b new-branch. The -b flag is used when we are making a new Branch and after the flag we write the name of our new branch. We can make many commits on this branch and later get them back to master with a process called merging.

In the diagram below, the dots represent commits. Two branches have been made "off" of master. In software development, we often call these "feature" branches, as opposed to the main master branch. The blue branch has been merged back into master and the yellow branch is still being developed.

Note that even though the yellow branch was created after the blue branch, only changes from master will be visible in that branch. If we made a third branch sometime in the future, changes from both master and the blue branch would be present in the new, third branch.

git merge

git merge will take all the commits you've made on that branch and stick them into the master branch, saving your work.

Why use branches?

If you're working alone, it may not make a lot of sense to split your work into branches. Why not just save everything on master?

The utility of branching does not become very clear until we start thinking about working on a team of developers. If they were all committing to the master branch every time they made a change, things would get very messy very quickly. It would also be difficult to control what code goes "to production" (live to customers) and which code is still being tested or worked on.

This way, every developer can have their own branch (or, likely, many), work on their feature for as long as they need, and merge it when the time is right.

What is GitHub?

GitHub is a free (for personal use), cloud-hosted platform for code. It works with Git on your and your colleagues' computers, serving as the origin, the source of truth for anyone working on the code.

You and your collaborators upload their code to GitHub periodically, and GitHub provides tooling to help manage changes to the code over time.

Uploading your code to GitHub

First, you'll need to create a GitHub account. You'll use this account for your entire programming career, so hot tip: stick with a professional name, preferably with your actual name in it.

Once you're in, look for a + in the top corner. Click "New Repository" (the name for Git folders, "repo" for short). Give it a name - probably the same as the folder you created earlier where you've saved your commits. Then click "Create Repository". You can now copy the url you are redirected to and we can set the origin for our code.

There will be an authentication step at some point here - just follow the directions. Git is very good about giving us clear instructions on the next steps to take.

git remote add origin

Now we will tell our codebase (the folder where our code is) where to store our code in the cloud. We'll type git remote add origin , which will set an origin for our repository.  Now we can push to our origin to store our cloud at GitHub.

git push

Assuming we're still in our master branch (that is, we have not checked out another branch), we can now type git push and our code will go to GitHub.

Viewing your code

Now your code lives in GitHub! Here's what my example from above looks like after I follow the GitHub steps I've explained:

You can click through the files and folders of your repository, viewing the current state of the code. You can also view previous versions of the code, by clicking "X commits" on the right side, middle. You'll see a list of the commits made to the repo and if you click into them, you can browse the files of your project as they existed at that slice of time.

Pull Requests

There are many other features of GitHub, but the most important in collaborating with colleagues is a pull request. A pull request (very frequently shortened to PR) is a way to manage incoming changes to the code base.

To make one, you'll make a new branch on your local computer, create at least one commit on that branch, then git push origin head to send that branch to GitHub. (You can put the name of your branch instead of head but it's useful for keeping everything matched up exactly).

Now when you go back to GitHub, you should see your branch available to make a PR.

If you click the "Compare & pull request" button, you'll be able to change many settings for your PR. Most important are generally title and description. If you're working on a team, you can tag colleagues to ask them to review your code, add to projects, and many other features you probably don't care about yet.

Note that we are comparing branches. Here we are requesting to add the changes from this branch (pr-example) into the master branch. But we could target any of the other branches in our repo. For now, just understand that master isn't the only branch you can "make a pull request against".

When you click "Create Pull Request", you'll see this screen:

You can see all the commits in this branch (I have only one - "Change third line of program"), and you can also merge your pull request.

Remember how we could merge our code locally when we talked about Git? We can perform the same action with our cloud-hosted code on GitHub. If you click the green "Merge pull request" button, your changes will be merged into master.

git pull

Η τελευταία εντολή που πρέπει να γνωρίζετε τώρα είναι git pull. Εάν συγχωνεύσατε το PR σας στον masterκλάδο του GitHub, υπάρχουν τώρα αλλαγές στο originότι δεν έχετε ακόμη στον τοπικό υπολογιστή σας. Εάν ελέγξετε το masterυποκατάστημα, τότε git pull origin master, οι αλλαγές που μόλις συγχωνεύσατε θα είναι τώρα στον τοπικό υπολογιστή σας.

➜ git-example git:(master) git pull origin master From //github.com/AmberWilkie/git-example * branch master -> FETCH_HEAD Updating 67627dd..38ad2da Fast-forward git.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)

Αυτό το "Fast-forward" αναφέρεται στον τοπικό κύριο κλάδο μας "catching up" με τον originκλάδο στο GitHub. Ολοκληρώσαμε τον κύκλο:

  • Τοπικές αλλαγές
  • Πιέστε στο GitHub και κάντε PR
  • Συγχώνευση PR σε κύριο
  • Τραβήξτε το κύριο στον τοπικό υπολογιστή

Μόλις αισθανθείτε άνετα με αυτά τα βήματα, θα είστε το 80% του τρόπου να αποκτήσετε το Git και το GitHub!