_Người dịch: [Ngo Phu Hien](https://github.com/FlopffyGrape)_ (một số đoạn dịch được lấy và chỉnh sửa từ [Tran Ly Vu](https://github.com/tranlyvu))

[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/)
[<img align="right" width="150" src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/join-slack-team.png">](https://join.slack.com/t/firstcontributors/shared_invite/zt-1hg51qkgm-Xc7HxhsiPYNN3ofX2_I8FA)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions)

# Những đóng góp đầu tiên

| <img alt="GitHub Desktop" src="https://desktop.github.com/images/desktop-icon.svg" width="200"> | GitHub Desktop Edition |
| ----------------------------------------------------------------------------------------------- | ---------------------- |

Lần đầu tiên bạn làm gì cũng có thể gặp nhiều trở ngại. Khi bạn cộng tác cũng vậy, sai lầm là điều khó tránh khỏi. Vì vậy, chúng tôi muốn đơn giản hóa quy trình học và đóng góp của bạn vào những dự án mở.

Việc đọc hướng dẫn là có tác dụng, nhưng có gì tốt hơn là thực hành một cách thực tế? Dự án này nhằm mục đích hướng dẫn và đơn giản hóa cách để đóng góp vào những dự án mở trên Github cho người mới bắt đầu. Nếu bạn mong muốn thực hiện việc đóng góp đầu tiên của mình, chỉ cần làm theo các bước đơn giản bên dưới.

Nếu bạn muốn hiểu rõ hơn về cách Git và Github hoạt động, xem **Chú giải thuật ngữ Tiếng Anh** ở cuối trang.

Nếu bạn không có Github Desktop trên máy, [cài đặt](https://desktop.github.com/).

Nếu bạn đang dùng Github Desktop phiên bản 1.0 trở xuống, [nên xem hướng dẫn này](github-desktop-old-version-tutorial.md).

<img align="right" width="300" src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/fork.png" alt="Copy kho dự án" />

## Copy kho mã nguồn (Fork)
Copy kho mã nguồn này bằng cách nhấn vào nút Fork đầu trang này. Bản sao kho mã nguồn này sẽ được tạo ra trong tài khoản của bạn.

## Tải kho mã nguồn về máy (Clone)
Clone sẽ cho phép bạn tải kho mã nguồn (hay còn gọi là repository) về máy. (Download locally)

Để tải kho mã nguồn, nhấn vào "Clone or Download" sau đó nhấn "Open in Desktop"

LƯU Ý: Đừng tải kho mã nguồn gốc. Tải kho mã nguồn mà bạn vừa copy tại tài khoản của bạn

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-clonetodesktop.png" alt="clone this repository" />

Một cửa sổ sẽ hiện lên. Nhấn vào "Open GitHubDesktop.exe"

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-open-githubdesktop.png" alt="clone this repository" />

Sau khi bạn nhấn nút "Open GitHubDesktop.exe", kho mã nguồn sẽ tự động tải về máy bạn.

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-downloaded.png" alt="clone this repository" />

Bây giờ bạn đã tải thành công kho mã nguồn `first-contributions` trên github vào máy.

## Tạo chi nhánh (Branch)

Bước tiếp theo, bạn tạo branch mới bằng cách nhấn vào biểu tượng có dòng chữ "Current branch", sau đó nhấn "New branch"

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-create-branch.png" alt="make a branch" />

Đặt tên branch vừa tạo là <add-tên-bạn>. Ví dụ, "add-hien-ngo"

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-create-branch-name.png" alt="name your branch" />

Nhấn `Create branch`

## Thực hiện những thay đổi cần thiết và commit các thay đổi vừa làm

Bây giờ mở tập tin Contributors.md và thêm tên của mình vào ở cuối tập tin. Sau đó lưu lại.

Ví dụ: Nếu tên bạn là Ngo Phu Hien, Bạn sẽ viết như này:

\[Ngo Phu Hien](https://github.com/hien-ngo29)

Lưu ý: https://github.com/hien-ngo29 là link vào tài khoản Github của bạn

Bạn có thể thấy những thay đổi của Contributors.md khi mở GithubDesktop.

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-status.png" alt="check status" />

Bây giờ hãy commit các thay đổi đó. Commit sẽ lưu lại các thay đổi bạn vừa làm trên máy, nhưng chưa upload lên kho mã nguồn

Viết tin nhắn thay đổi: "Add `<tên-bạn>` to Contributors list" tại phần __summary__

Nhớ đổi `<tên-bạn>` thành đúng tên của bạn.

Nhấn `Commit to add-tên-bạn`.

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-commit1.png" alt="commit your changes" />

Ngay bên dưới, bạn sẽ thấy ngay commit đã được tạo.

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-commit2.png" alt="commit your changes" />

## Đẩy các thay đổi lên Github (Push)
Push cho phép bạn upload các thay đổi bạn đã thực hiện trên máy lên kho mã nguồn chính.

Chọn File->Options và đăng nhập vào tài khoản Github.com của bạn. Gõ Github username và mật khẩu.

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-sign-in.png" alt="log-in to Github" />

Nhấn vào nút `Publish` ở góc trên.

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/dt1-publish1.png" alt="push your changes" />

## Gửi những thay đổi của bạn để xem xét (Pull Request)
Nếu bạn vào trang kho mã nguồn mà bạn vừa fork trên Github, bạn sẽ thấy nút `Compare & pull request`. Nhấn nút đó.

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/compare-and-pull.png" alt="create a pull request" />

Bây giờ gửi yêu cầu kéo. (Pull request)

<img src="https://firstcontributions.github.io/assets/gui-tool-tutorials/github-desktop-tutorial/submit-pull-request.png" alt="submit pull request" />

Tôi sẽ sớm hợp nhất (merge) tất cả các thay đổi của bạn vào nhánh chủ (master branch) của project này. Bạn sẽ nhận được email thông báo sau khi các thay đổi đã được hợp nhất.

## Đi đâu từ đây?

Chúc mừng! Bạn vừa hoàn thành quy trình đóng góp tiêu chuẩn: Copy kho mã nguồn (fork) -> Tải về máy (clone) -> Chỉnh sửa (edit) -> Gửi yêu cầu kéo (pull request) mà bạn sẽ làm thường xuyên khi đóng góp những dự án mở!

Hãy ăn mừng đóng góp của bạn và chia sẻ nó với bạn bè và những người theo dõi bằng cách truy cập [ứng dụng web](https://roshanjossey.github.io/first-contribution/#social-share).

Bạn có thể tham gia slack của chúng tôi trong trường hợp bạn cần trợ giúp hoặc có câu hỏi nào. [Tham gia slack](https://join.slack.com/t/firstcontributors/shared_invite/zt-1hg51qkgm-Xc7HxhsiPYNN3ofX2_I8FA).

### [Tài liệu](../additional-material/git_workflow_scenarios/additional-material.md)

## Hướng dẫn sử dụng các công cụ khác

[Quay lại trang chính](https://github.com/firstcontributions/first-contributions#tutorials-using-other-tools)

## _Chú giải thuật ngữ Tiếng Anh_
**Fork**: Copy kho mã nguồn của tài khoản Github khác sang tài khoản Github của bạn. Những thay đổi bạn làm trên kho mã nguồn vừa sao chép ở tài khoản sẽ không bị ảnh hưởng ở kho mã nguồn tài khoản bên kia (nhưng nhớ phải tạo branch mới).

**Clone**: Khác với nghĩa Tiếng Anh thông thường là *Sao chép*. Clone trên Git là tải kho mã nguồn về máy (Download locally). Vì thông thường khi thực hiện thay đổi trên kho mã nguồn thì bạn không nên thực hiện trực tiếp trên trang web của kho mã nguồn, tốt nhất nên tải về sau đó làm gì thì làm :).

**Branch**: Nôm na là phiên bản của kho mã nguồn. Có nhiều branch khác nhau do các tài khoản khác fork và tạo hay do chính chủ tạo. Branch thông thường bạn thấy khi mở kho mã nguồn là branch `master` hay `main`. Hay các branch khác là branch phiên bản:`v1`,`v2` ,.. hay branch `wip` (Working in progress (Đang làm) ). Các branch có thể được hợp nhất lại với nhau khi tạo Pull Request và được đồng ý bởi chính chủ. Bạn có thể chọn branch khi Fork, Clone, Commit, Push trên Github nhưng theo mặc định thì branch thông thường tên `master` hay `main`. Như ở hướng dẫn khi bạn fork mã nguồn thì phải tạo branch mới rồi thực hiện thay đổi lên branch đó chứ không thực hiện thay đổi lên branch `main` được (vì bạn không có quyền). Sau đó tạo Pull Request trên trang kho mã nguồn gốc và chờ được chủ đồng ý hợp nhất vào branch `main` .

**Commit**: Lưu các thay đổi mà bạn vừa làm trên máy nhưng chưa upload lên kho mã nguồn chính trên Github. Nói rõ và dể hiểu hơn, khi bạn clone kho mã nguồn lên máy, 1 thư mục ẩn sẽ được tạo là *.git* (để xem thư mục đó bạn chọn View->Hidden Items ở File Explorer). Thư mục này đóng vai trò quản lý các thay đổi bạn vừa làm trên máy hay nói nôm na là *file dự án* của Git. Các thay đổi mà bạn thực hiện sẽ được lưu trong thư mục *.git* đó sau khi bạn commit.

**Push**: Upload các thay đổi bạn vừa làm trên máy lên kho mã nguồn chính. Lưu ý phải commit các thay đổi trước khi push. Bạn có thể tạo nhiều commit rồi push 1 lần.

**Pull Request**: Sau khi bạn Fork một kho mã nguồn ở tài khoản khác và thực hiện thay đổi trên kho mã nguồn của tài khoản bạn. Bạn có thể tạo tin nhắn yêu cầu hợp nhất những thay đổi bạn thực hiện qua kho mã nguồn gốc bên tài khoản kia. Nói dễ hiểu là push các thay đổi của bạn thẳng lên mã nguồn gốc với điều kiện phải được chủ kho mã nguồn đồng ý và chấp nhận. Đây chính là phần thịt của đóng góp các dự án mở trên Github.