From 818b8eec46b11b36b5235ecbce540557afec4687 Mon Sep 17 00:00:00 2001 From: Boris Verkhovskiy Date: Thu, 4 Apr 2024 00:27:01 -0700 Subject: Convert \r\n to \n --- vi-vn/git-vi.html.markdown | 774 ++++++++++++++++++------------------- vi-vn/objective-c-vi.html.markdown | 632 +++++++++++++++--------------- 2 files changed, 703 insertions(+), 703 deletions(-) (limited to 'vi-vn') diff --git a/vi-vn/git-vi.html.markdown b/vi-vn/git-vi.html.markdown index f5454ebf..47485bd9 100644 --- a/vi-vn/git-vi.html.markdown +++ b/vi-vn/git-vi.html.markdown @@ -1,328 +1,328 @@ ---- -category: tool -tool: git -contributors: +--- +category: tool +tool: git +contributors: - ["Jake Prather", "http://github.com/JakeHP"] - - ["Vinh Nguyen", "https://twitter.com/vinhnx"] -filename: LearnGit-vi.txt -lang: vi-vn ---- - -Git là một hệ quản lý mã nguồn và phiên bản phân tán (distributed version control and source code management system). - -Nó làm được điều này là do một loạt các snapshot từ đề án của bạn, và nó hoạt động -với các snapshot đó để cung cấp cho bạn với chức năng đến phiên bản và -quản lý mã nguồn của bạn. - -## Khái Niệm Versioning - -### Version Control là gì? - -Version Control là một hệ thống ghi lại những thay đổi ở một tập tin, hay một nhóm các tập tin, theo thời gian. - -### So sánh giữa Centralized Versioning và Distributed Versioning - -* Quản lý phiên bản tập trung (Centralized Versioning) tập trung vào việc đồng bộ hóa, theo dõi, và lưu trữ tập tin. -* Quản lý phiên bản phân tán (Distributed Versioning) tập trung vào việc chia sẻ các thay đổi. Mỗi sự thay đổi có một mã định dạng (id) duy nhất. -* Các hệ phân tán không có cấu trúc định sẵn. Bạn có thể thay đổi một kiểu SVN, hệ phân tán, với git. - -[Thông tin thêm](http://git-scm.com/book/en/Getting-Started-About-Version-Control) - -### Tại Sao Dùng Git? - -* Có thể hoạt động offline. -* Cộng tác với nhau rất dễ dàng! -* Phân nhánh dễ dàng! -* Trộn (Merging) -* Git nhanh. -* Git linh hoạt. - -## Kiến Trúc Git - - -### Repository - -Một nhóm các tập tin, thư mục, các ghi chép trong quá khứ, commit, và heads. Tưởng tượng nó như là một cấu trúc dữ liệu mã nguồn, -với thuộc tính mà một "nhân tố" mã nguồn cho bạn quyền truy cập đến lịch sử sửa đổi, và một số thứ khác. - -Một git repository bao gồm thư mục .git & tree đang làm việc. - -### Thư mục .git (thành phần của một repository) - -Thư mục .git chứa tất cả các cấu hình, log, nhánh, HEAD, và hơn nữa. -[Danh Sách Chi Tiết.](http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html) - -### Tree Đang Làm (thành phần của một repository) - -Đây cơ bản là các thư mục và tập tin trong repository của bạn. Nó thường được tham chiếu -thư mục đang làm việc của bạn - -### Chỉ mục (thành phần của một thư mục .git) - -Chỉ mục của là một staging area trong git. Nó đơn giản là một lớp riêng biệt với tree đang làm việc của bạn -từ Git repository. Điều này cho nhà phát triền nhiều lựa chọn hơn trong việc xem xét những gì được gửi đến Git -repository. - -### Commit - -Một git commit là một snapshot của một nhóm các thay đổi, hoặc các thao tác Working Tree của bạn. -Ví dụ, nếu bạn thêm 5 tập tin, và xóa 2 tập tin khác, những thay đổi này sẽ được chứa trong -một commit (hoặc snapshot). Commit này có thể được đẩy đến các repo khác, hoặc không! - -### Nhánh - -Nhánh thực chất là một con trỏ đến commit mới nhất mà bạn vừa thực hiện. Khi bạn commit, -con trỏ này sẽ cập nhật tự động và trỏ đến commit mới nhất. - -### HEAD và head (thành phần của thư mục .git) - -HEAD là một con trỏ đến branch hiện tại. Một repo chỉ có một HEAD *đang hoạt động*. -head là một con trỏ đến bất kỳ commit nào. Một repo có thể có nhiều head. - -### Các Tài Nguyên Mang Tính Khái Niệm - -* [Git For Computer Scientists](http://eagain.net/articles/git-for-computer-scientists/) -* [Git For Designers](http://hoth.entp.com/output/git_for_designers.html) - - -## Các Lệnh - - -### init - -Tạo một repo Git rỗng. Các cài đặt, thông tin lưu trữ... của Git -được lưu ở một thư mục tên là ".git". - -```bash -$ git init -``` - -### config - -Để chỉnh tùy chọn. Bất kể là cho repo, hay cho hệ thống, hay điều chỉnh -toàn cục (global) - - - -```bash -# In Ra & Và Gán Một Số Biến Tùy Chỉnh Cơ Bản (Toàn cục - Global) -$ git config --global user.email -$ git config --global user.name - -$ git config --global user.email "MyEmail@Zoho.com" -$ git config --global user.name "My Name" -``` - -[Tìm hiểu thêm về git config.](http://git-scm.com/docs/git-config) - -### help - -Để cho bạn lối truy cập nhanh đến một chỉ dẫn cực kỳ chi tiết của từng lệnh. Hoặc chỉ để -nhắc bạn một số cú pháp. - -```bash -# Xem nhanh các lệnh có sẵn -$ git help - -# Xem tất các các lệnh -$ git help -a - -# Lệnh help riêng biệt - tài liệu người dùng -# git help -$ git help add -$ git help commit -$ git help init -``` - -### status - -Để hiển thị sự khác nhau giữa tập tin index (cơ bản là repo đang làm việc) và HEAD commit -hiện tại. - - -```bash -# Sẽ hiển thị nhánh, các tập tin chưa track (chưa commit), các thay đổi và những khác biệt khác -$ git status - -# Để xem các "tid bits" về git status -$ git help status -``` - -### add - -Để thêm các tập vào tree/thư mục/repo hiện tại. Nếu bạn không `git add` các tập tin mới đến -tree/thư mục hiện tại, chúng sẽ không được kèm theo trong các commit! - -```bash -# thêm một file vào thư mục hiện tại -$ git add HelloWorld.java - -# thêm một file vào một thư mục khác -$ git add /path/to/file/HelloWorld.c - -# Hỗ trợ Regular Expression! -$ git add ./*.java -``` - -### branch - -Quản lý nhánh (branch). Bạn có thể xem, sửa, tạo, xóa các nhánh bằng cách dùng lệnh này. - -```bash -# liệt kê các branch đang có và ở remote -$ git branch -a - -# tạo branch mới -$ git branch myNewBranch - -# xóa một branch -$ git branch -d myBranch - -# đặt tên lại một branch -# git branch -m -$ git branch -m myBranchName myNewBranchName - -# chỉnh sửa diễn giải của một branch -$ git branch myBranchName --edit-description -``` - -### checkout - -Cập nhật tất cả các file trong tree hiện tại để cho trùng khớp với phiên bản của index, hoặc tree cụ thể. - -```bash -# Checkout (chuyển) một repo - mặc định là nhánh master -$ git checkout -# Checkout một nhánh cụ thể -$ git checkout branchName -# Tạo một nhánh mới và chuyển đến nó, tương tự: "git branch ; git checkout " -$ git checkout -b newBranch -``` - -### clone - -Nhân bản, hoặc sao chép, một repo hiện có thành một thư mục mới. Nó cũng thêm -các branch có remote-tracking cho mỗi branch trong một repo được nhân bản, mà -cho phép bạn push đến một remote branch. - -```bash -# Nhân bản learnxinyminutes-docs -$ git clone https://github.com/adambard/learnxinyminutes-docs.git -``` - -### commit - -Lưu trữ nội dung hiện tại của index trong một "commit" mới. Điều này cho phép tạo ra thay đổi và một ghi chú tạo ra bởi người dùng. - -```bash -# commit với một ghi chú -$ git commit -m "Added multiplyNumbers() function to HelloWorld.c" -``` - -### diff - -Hiển thị sự khác biệt giữa một file trong thư mục hiện tại, index và commits. - -```bash -# Hiển thị sự khác biệt giữa thư mục hiện tại và index -$ git diff - -# Hiển thị khác biệt giữa index và commit mới nhất. -$ git diff --cached - -# Hiển thị khác biệt giữa thư mục đang làm việc và commit mới nhất -$ git diff HEAD -``` - -### grep - -Cho phép bạn tìm kiếm nhanh một repo. - -Các tinh chỉnh tùy chọn: - -```bash -# Cảm ơn Travis Jeffery vì những lệnh này -# Đặt số của dòng được hiển thị trong kết quả tìm kiếm grep -$ git config --global grep.lineNumber true - -# Làm cho kết quả tìm kiếm dễ đọc hơn, bao gồm cả gom nhóm -$ git config --global alias.g "grep --break --heading --line-number" -``` - -```bash -# Tìm "variableName" trong tất cả các file Java -$ git grep 'variableName' -- '*.java' - -# Tìm một dòng mà có chứa "arrayListName" và, "add" hoặc "remove" -$ git grep -e 'arrayListName' --and \( -e add -e remove \) -``` - -Google để xem thêm các ví dụ -[Git Grep Ninja](http://travisjeffery.com/b/2012/02/search-a-git-repo-like-a-ninja) - -### log - -Hiển thị các commit đến repo. - -```bash -# Hiện tất cả các commit -$ git log - -# Hiện X commit -$ git log -n 10 - -# Chỉ hiện các commit đã merge merge commits -$ git log --merges -``` - -### merge - -"Trộn" các thay đổi từ commit bên ngoài vào trong nhánh hiện tại. - -```bash -# Merge branch cụ thể vào branch hiện tại. -$ git merge branchName - -# Luôn khởi tạo một merge commit khi trộn (merge) -$ git merge --no-ff branchName -``` - -### mv - -Đặt lại tên hoặc di chuyển một file - -```bash -# Đặt lại tên một file -$ git mv HelloWorld.c HelloNewWorld.c - -# Di chuyển một file -$ git mv HelloWorld.c ./new/path/HelloWorld.c - -# Buộc đặt lại tên hoặc di chuyển -# "existingFile" đã tồn tại trong thự mục, sẽ bị ghi đè -$ git mv -f myFile existingFile -``` - -### pull - -Pull về từ một repo và merge nó vào branch khác. - -```bash -# Cập nhật repo local của bạn, bằng cách merge các thay đổi mới -# từ remote "origin" và nhánh "master". -# git pull -# git pull => hoàn toàn mặc định như => git pull origin master -$ git pull origin master - -# Merge các thay đổi từ remote branch và rebase -# các commit trong branch lên trên local repo, như sau: "git pull , git rebase " -$ git pull origin master --rebase -``` - -### push - -push và merge các thay đổi từ một branch đến một remote & branch. - + - ["Vinh Nguyen", "https://twitter.com/vinhnx"] +filename: LearnGit-vi.txt +lang: vi-vn +--- + +Git là một hệ quản lý mã nguồn và phiên bản phân tán (distributed version control and source code management system). + +Nó làm được điều này là do một loạt các snapshot từ đề án của bạn, và nó hoạt động +với các snapshot đó để cung cấp cho bạn với chức năng đến phiên bản và +quản lý mã nguồn của bạn. + +## Khái Niệm Versioning + +### Version Control là gì? + +Version Control là một hệ thống ghi lại những thay đổi ở một tập tin, hay một nhóm các tập tin, theo thời gian. + +### So sánh giữa Centralized Versioning và Distributed Versioning + +* Quản lý phiên bản tập trung (Centralized Versioning) tập trung vào việc đồng bộ hóa, theo dõi, và lưu trữ tập tin. +* Quản lý phiên bản phân tán (Distributed Versioning) tập trung vào việc chia sẻ các thay đổi. Mỗi sự thay đổi có một mã định dạng (id) duy nhất. +* Các hệ phân tán không có cấu trúc định sẵn. Bạn có thể thay đổi một kiểu SVN, hệ phân tán, với git. + +[Thông tin thêm](http://git-scm.com/book/en/Getting-Started-About-Version-Control) + +### Tại Sao Dùng Git? + +* Có thể hoạt động offline. +* Cộng tác với nhau rất dễ dàng! +* Phân nhánh dễ dàng! +* Trộn (Merging) +* Git nhanh. +* Git linh hoạt. + +## Kiến Trúc Git + + +### Repository + +Một nhóm các tập tin, thư mục, các ghi chép trong quá khứ, commit, và heads. Tưởng tượng nó như là một cấu trúc dữ liệu mã nguồn, +với thuộc tính mà một "nhân tố" mã nguồn cho bạn quyền truy cập đến lịch sử sửa đổi, và một số thứ khác. + +Một git repository bao gồm thư mục .git & tree đang làm việc. + +### Thư mục .git (thành phần của một repository) + +Thư mục .git chứa tất cả các cấu hình, log, nhánh, HEAD, và hơn nữa. +[Danh Sách Chi Tiết.](http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html) + +### Tree Đang Làm (thành phần của một repository) + +Đây cơ bản là các thư mục và tập tin trong repository của bạn. Nó thường được tham chiếu +thư mục đang làm việc của bạn + +### Chỉ mục (thành phần của một thư mục .git) + +Chỉ mục của là một staging area trong git. Nó đơn giản là một lớp riêng biệt với tree đang làm việc của bạn +từ Git repository. Điều này cho nhà phát triền nhiều lựa chọn hơn trong việc xem xét những gì được gửi đến Git +repository. + +### Commit + +Một git commit là một snapshot của một nhóm các thay đổi, hoặc các thao tác Working Tree của bạn. +Ví dụ, nếu bạn thêm 5 tập tin, và xóa 2 tập tin khác, những thay đổi này sẽ được chứa trong +một commit (hoặc snapshot). Commit này có thể được đẩy đến các repo khác, hoặc không! + +### Nhánh + +Nhánh thực chất là một con trỏ đến commit mới nhất mà bạn vừa thực hiện. Khi bạn commit, +con trỏ này sẽ cập nhật tự động và trỏ đến commit mới nhất. + +### HEAD và head (thành phần của thư mục .git) + +HEAD là một con trỏ đến branch hiện tại. Một repo chỉ có một HEAD *đang hoạt động*. +head là một con trỏ đến bất kỳ commit nào. Một repo có thể có nhiều head. + +### Các Tài Nguyên Mang Tính Khái Niệm + +* [Git For Computer Scientists](http://eagain.net/articles/git-for-computer-scientists/) +* [Git For Designers](http://hoth.entp.com/output/git_for_designers.html) + + +## Các Lệnh + + +### init + +Tạo một repo Git rỗng. Các cài đặt, thông tin lưu trữ... của Git +được lưu ở một thư mục tên là ".git". + +```bash +$ git init +``` + +### config + +Để chỉnh tùy chọn. Bất kể là cho repo, hay cho hệ thống, hay điều chỉnh +toàn cục (global) + + + +```bash +# In Ra & Và Gán Một Số Biến Tùy Chỉnh Cơ Bản (Toàn cục - Global) +$ git config --global user.email +$ git config --global user.name + +$ git config --global user.email "MyEmail@Zoho.com" +$ git config --global user.name "My Name" +``` + +[Tìm hiểu thêm về git config.](http://git-scm.com/docs/git-config) + +### help + +Để cho bạn lối truy cập nhanh đến một chỉ dẫn cực kỳ chi tiết của từng lệnh. Hoặc chỉ để +nhắc bạn một số cú pháp. + +```bash +# Xem nhanh các lệnh có sẵn +$ git help + +# Xem tất các các lệnh +$ git help -a + +# Lệnh help riêng biệt - tài liệu người dùng +# git help +$ git help add +$ git help commit +$ git help init +``` + +### status + +Để hiển thị sự khác nhau giữa tập tin index (cơ bản là repo đang làm việc) và HEAD commit +hiện tại. + + +```bash +# Sẽ hiển thị nhánh, các tập tin chưa track (chưa commit), các thay đổi và những khác biệt khác +$ git status + +# Để xem các "tid bits" về git status +$ git help status +``` + +### add + +Để thêm các tập vào tree/thư mục/repo hiện tại. Nếu bạn không `git add` các tập tin mới đến +tree/thư mục hiện tại, chúng sẽ không được kèm theo trong các commit! + +```bash +# thêm một file vào thư mục hiện tại +$ git add HelloWorld.java + +# thêm một file vào một thư mục khác +$ git add /path/to/file/HelloWorld.c + +# Hỗ trợ Regular Expression! +$ git add ./*.java +``` + +### branch + +Quản lý nhánh (branch). Bạn có thể xem, sửa, tạo, xóa các nhánh bằng cách dùng lệnh này. + +```bash +# liệt kê các branch đang có và ở remote +$ git branch -a + +# tạo branch mới +$ git branch myNewBranch + +# xóa một branch +$ git branch -d myBranch + +# đặt tên lại một branch +# git branch -m +$ git branch -m myBranchName myNewBranchName + +# chỉnh sửa diễn giải của một branch +$ git branch myBranchName --edit-description +``` + +### checkout + +Cập nhật tất cả các file trong tree hiện tại để cho trùng khớp với phiên bản của index, hoặc tree cụ thể. + +```bash +# Checkout (chuyển) một repo - mặc định là nhánh master +$ git checkout +# Checkout một nhánh cụ thể +$ git checkout branchName +# Tạo một nhánh mới và chuyển đến nó, tương tự: "git branch ; git checkout " +$ git checkout -b newBranch +``` + +### clone + +Nhân bản, hoặc sao chép, một repo hiện có thành một thư mục mới. Nó cũng thêm +các branch có remote-tracking cho mỗi branch trong một repo được nhân bản, mà +cho phép bạn push đến một remote branch. + +```bash +# Nhân bản learnxinyminutes-docs +$ git clone https://github.com/adambard/learnxinyminutes-docs.git +``` + +### commit + +Lưu trữ nội dung hiện tại của index trong một "commit" mới. Điều này cho phép tạo ra thay đổi và một ghi chú tạo ra bởi người dùng. + +```bash +# commit với một ghi chú +$ git commit -m "Added multiplyNumbers() function to HelloWorld.c" +``` + +### diff + +Hiển thị sự khác biệt giữa một file trong thư mục hiện tại, index và commits. + +```bash +# Hiển thị sự khác biệt giữa thư mục hiện tại và index +$ git diff + +# Hiển thị khác biệt giữa index và commit mới nhất. +$ git diff --cached + +# Hiển thị khác biệt giữa thư mục đang làm việc và commit mới nhất +$ git diff HEAD +``` + +### grep + +Cho phép bạn tìm kiếm nhanh một repo. + +Các tinh chỉnh tùy chọn: + +```bash +# Cảm ơn Travis Jeffery vì những lệnh này +# Đặt số của dòng được hiển thị trong kết quả tìm kiếm grep +$ git config --global grep.lineNumber true + +# Làm cho kết quả tìm kiếm dễ đọc hơn, bao gồm cả gom nhóm +$ git config --global alias.g "grep --break --heading --line-number" +``` + +```bash +# Tìm "variableName" trong tất cả các file Java +$ git grep 'variableName' -- '*.java' + +# Tìm một dòng mà có chứa "arrayListName" và, "add" hoặc "remove" +$ git grep -e 'arrayListName' --and \( -e add -e remove \) +``` + +Google để xem thêm các ví dụ +[Git Grep Ninja](http://travisjeffery.com/b/2012/02/search-a-git-repo-like-a-ninja) + +### log + +Hiển thị các commit đến repo. + +```bash +# Hiện tất cả các commit +$ git log + +# Hiện X commit +$ git log -n 10 + +# Chỉ hiện các commit đã merge merge commits +$ git log --merges +``` + +### merge + +"Trộn" các thay đổi từ commit bên ngoài vào trong nhánh hiện tại. + +```bash +# Merge branch cụ thể vào branch hiện tại. +$ git merge branchName + +# Luôn khởi tạo một merge commit khi trộn (merge) +$ git merge --no-ff branchName +``` + +### mv + +Đặt lại tên hoặc di chuyển một file + +```bash +# Đặt lại tên một file +$ git mv HelloWorld.c HelloNewWorld.c + +# Di chuyển một file +$ git mv HelloWorld.c ./new/path/HelloWorld.c + +# Buộc đặt lại tên hoặc di chuyển +# "existingFile" đã tồn tại trong thự mục, sẽ bị ghi đè +$ git mv -f myFile existingFile +``` + +### pull + +Pull về từ một repo và merge nó vào branch khác. + +```bash +# Cập nhật repo local của bạn, bằng cách merge các thay đổi mới +# từ remote "origin" và nhánh "master". +# git pull +# git pull => hoàn toàn mặc định như => git pull origin master +$ git pull origin master + +# Merge các thay đổi từ remote branch và rebase +# các commit trong branch lên trên local repo, như sau: "git pull , git rebase " +$ git pull origin master --rebase +``` + +### push + +push và merge các thay đổi từ một branch đến một remote & branch. + ```bash # Push và merge các thay đổi từ một repo local đến một # remote có tên là "origin" và nhánh "master". @@ -334,68 +334,68 @@ $ git push origin master $ git push -u origin master # Từ lúc này, bất cứ khi nào bạn muốn push từ cùng một nhánh local đó, sử dụng lối tắt: $ git push -``` - -### rebase (thận trọng) - -Lấy tất cả các thay đổi mà đã được commit trên một nhánh, và replay (?) chúng trên một nhánh khác. -*Không rebase các commit mà bạn đã push đến một repo công khai*. - -```bash -# Rebase experimentBranch lên master -# git rebase -$ git rebase master experimentBranch -``` - -[Đọc Thêm.](http://git-scm.com/book/en/Git-Branching-Rebasing) - -### reset (thận trọng) - -Thiết lập lạo HEAD hiện tại đến một trạng thái cụ thể. Điều này cho phép bạn làm lại các merges, -pulls, commits, thêm, and hơn nữa. Nó là một lệnh hay nhưng cũng nguy hiểm nếu bạn không -biết mình đang làm gì. - -```bash -# Thiết lập lại staging area, để trùng với commit mới nhất (để thư mục không thay đổi) -$ git reset - -# Thiết lập lại staging area, để trùng với commit mới nhất, và ghi đè lên thư mục hiện tại -$ git reset --hard - -# Di chuyển nhánh hiện tại đến một commit cụ thể (để thư mục không thay đổi) -# tất cả thay đổi vẫn duy trì trong thư mục. -$ git reset 31f2bb1 - -# Di chuyển nhánh hiện tại lùi về một commit cụ thể -# và làm cho thư mục hiện tại trùng (xóa các thay đổi chưa được commit và tất cả các commit -# sau một commit cụ thể). -$ git reset --hard 31f2bb1 -``` - -### rm - -Ngược lại với git add, git rm xóa file từ tree đang làm việc. - -```bash -# xóa HelloWorld.c -$ git rm HelloWorld.c - -# Xóa file từ thư mục khác -$ git rm /pather/to/the/file/HelloWorld.c -``` - -## Thông tin thêm - -* [tryGit - A fun interactive way to learn Git.](http://try.github.io/levels/1/challenges/1) - -* [git-scm - Video Tutorials](http://git-scm.com/videos) - -* [git-scm - Documentation](http://git-scm.com/docs) - -* [Atlassian Git - Tutorials & Workflows](https://www.atlassian.com/git/) - -* [SalesForce Cheat Sheet](https://na1.salesforce.com/help/doc/en/salesforce_git_developer_cheatsheet.pdf) - +``` + +### rebase (thận trọng) + +Lấy tất cả các thay đổi mà đã được commit trên một nhánh, và replay (?) chúng trên một nhánh khác. +*Không rebase các commit mà bạn đã push đến một repo công khai*. + +```bash +# Rebase experimentBranch lên master +# git rebase +$ git rebase master experimentBranch +``` + +[Đọc Thêm.](http://git-scm.com/book/en/Git-Branching-Rebasing) + +### reset (thận trọng) + +Thiết lập lạo HEAD hiện tại đến một trạng thái cụ thể. Điều này cho phép bạn làm lại các merges, +pulls, commits, thêm, and hơn nữa. Nó là một lệnh hay nhưng cũng nguy hiểm nếu bạn không +biết mình đang làm gì. + +```bash +# Thiết lập lại staging area, để trùng với commit mới nhất (để thư mục không thay đổi) +$ git reset + +# Thiết lập lại staging area, để trùng với commit mới nhất, và ghi đè lên thư mục hiện tại +$ git reset --hard + +# Di chuyển nhánh hiện tại đến một commit cụ thể (để thư mục không thay đổi) +# tất cả thay đổi vẫn duy trì trong thư mục. +$ git reset 31f2bb1 + +# Di chuyển nhánh hiện tại lùi về một commit cụ thể +# và làm cho thư mục hiện tại trùng (xóa các thay đổi chưa được commit và tất cả các commit +# sau một commit cụ thể). +$ git reset --hard 31f2bb1 +``` + +### rm + +Ngược lại với git add, git rm xóa file từ tree đang làm việc. + +```bash +# xóa HelloWorld.c +$ git rm HelloWorld.c + +# Xóa file từ thư mục khác +$ git rm /pather/to/the/file/HelloWorld.c +``` + +## Thông tin thêm + +* [tryGit - A fun interactive way to learn Git.](http://try.github.io/levels/1/challenges/1) + +* [git-scm - Video Tutorials](http://git-scm.com/videos) + +* [git-scm - Documentation](http://git-scm.com/docs) + +* [Atlassian Git - Tutorials & Workflows](https://www.atlassian.com/git/) + +* [SalesForce Cheat Sheet](https://na1.salesforce.com/help/doc/en/salesforce_git_developer_cheatsheet.pdf) + * [Git - the simple guide](http://rogerdudler.github.io/git-guide/index.html) - + diff --git a/vi-vn/objective-c-vi.html.markdown b/vi-vn/objective-c-vi.html.markdown index 4656cf38..b01ce806 100644 --- a/vi-vn/objective-c-vi.html.markdown +++ b/vi-vn/objective-c-vi.html.markdown @@ -1,316 +1,316 @@ ---- -language: Objective-C -contributors: - - ["Eugene Yagrushkin", "www.about.me/yagrushkin"] - - ["Yannick Loriot", "https://github.com/YannickL"] -lang: vi-vn -filename: LearnObjectiveC-vi.m ---- - -Objective-C là ngôn ngữ lập trình chính được sử dụng bởi Apple cho các hệ điều hành macOS, iOS và các framework tương ứng của họ, Cocoa và Cocoa Touch. -Nó là một ngôn ngữ lập trình mục đích tổng quát, hướng đối tượng có bổ sung thêm kiểu truyền thông điệp giống Smalltalk vào ngôn ngữ lập trình C. - -```objective-c -// Chú thích dòng đơn bắt đầu với // - -/* -Chú thích đa dòng trông như thế này. -*/ - -// Nhập các headers của framework Foundation với cú pháp #import -#import -#import "MyClass.h" - -// Đầu vào chương trình của bạn là một hàm gọi là -// main với một kiểu trả về kiểu integer. -int main (int argc, const char * argv[]) -{ - // Tạo một autorelease pool để quản lý bộ nhớ vào chương trình - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - - // Sử dụng hàm NSLog() để in ra các dòng lệnh vào console - NSLog(@"Hello World!"); // Print the string "Hello World!" - - /////////////////////////////////////// - // Kiểu & Biến (Types & Variables) - /////////////////////////////////////// - - // Khai báo số nguyên - int myPrimitive1 = 1; - long myPrimitive2 = 234554664565; - - // Khai báo đối tượng - // Đặt dấu nháy * vào trước tên biến cho khai báo đối tượng strong - MyClass *myObject1 = nil; // Strong - id myObject2 = nil; // Weak - // %@ là một đối tượng - // 'miêu tả' ('desciption') là thông lệ để trình bày giá trị của các Đối tượng - NSLog(@"%@ và %@", myObject1, [myObject2 description]); // In ra "(null) và (null)" - - // Chuỗi - NSString *worldString = @"World"; - NSLog(@"Hello %@!", worldString); // In ra "Hello World!" - - // Ký tự literals - NSNumber *theLetterZNumber = @'Z'; - char theLetterZ = [theLetterZNumber charValue]; - NSLog(@"%c", theLetterZ); - - // Số nguyên literals - NSNumber *fortyTwoNumber = @42; - int fortyTwo = [fortyTwoNumber intValue]; - NSLog(@"%i", fortyTwo); - - NSNumber *fortyTwoUnsignedNumber = @42U; - unsigned int fortyTwoUnsigned = [fortyTwoUnsignedNumber unsignedIntValue]; - NSLog(@"%u", fortyTwoUnsigned); - - NSNumber *fortyTwoShortNumber = [NSNumber numberWithShort:42]; - short fortyTwoShort = [fortyTwoShortNumber shortValue]; - NSLog(@"%hi", fortyTwoShort); - - NSNumber *fortyTwoLongNumber = @42L; - long fortyTwoLong = [fortyTwoLongNumber longValue]; - NSLog(@"%li", fortyTwoLong); - - // Dấu phẩy động (floating point) literals - NSNumber *piFloatNumber = @3.141592654F; - float piFloat = [piFloatNumber floatValue]; - NSLog(@"%f", piFloat); - - NSNumber *piDoubleNumber = @3.1415926535; - double piDouble = [piDoubleNumber doubleValue]; - NSLog(@"%f", piDouble); - - // BOOL literals - NSNumber *yesNumber = @YES; - NSNumber *noNumber = @NO; - - // Đối tượng Mảng - NSArray *anArray = @[@1, @2, @3, @4]; - NSNumber *thirdNumber = anArray[2]; - NSLog(@"Third number = %@", thirdNumber); // In ra "Third number = 3" - - // Đối tượng Từ điển - NSDictionary *aDictionary = @{ @"key1" : @"value1", @"key2" : @"value2" }; - NSObject *valueObject = aDictionary[@"A Key"]; - NSLog(@"Đối tượng = %@", valueObject); // In ra "Object = (null)" - - /////////////////////////////////////// - // Toán Tử (Operators) - /////////////////////////////////////// - - // Các toán tử cũng hoạt động giống như ngôn ngữ C - // Ví dụ: - 2 + 5; // => 7 - 4.2f + 5.1f; // => 9.3f - 3 == 2; // => 0 (NO) - 3 != 2; // => 1 (YES) - 1 && 1; // => 1 (Logical and) - 0 || 1; // => 1 (Logical or) - ~0x0F; // => 0xF0 (bitwise negation) - 0x0F & 0xF0; // => 0x00 (bitwise AND) - 0x01 << 1; // => 0x02 (bitwise dịch trái (bởi 1)) - - ///////////////////////////////////////////// - // Cấu Trúc Điều Khiển (Controls Structures) - ///////////////////////////////////////////// - - // Câu lệnh If-Else - if (NO) - { - NSLog(@"I am never run"); - } else if (0) - { - NSLog(@"I am also never run"); - } else - { - NSLog(@"I print"); - } - - // Câu lệnh Switch - switch (2) - { - case 0: - { - NSLog(@"I am never run"); - } break; - case 1: - { - NSLog(@"I am also never run"); - } break; - default: - { - NSLog(@"I print"); - } break; - } - - // Câu lệnh vòng lặp While - int ii = 0; - while (ii < 4) - { - NSLog(@"%d,", ii++); // ii++ tăng dần, sau khi sử dụng giá trị của nó. - } // => in ra "0," - // "1," - // "2," - // "3," - - // Câu lệnh vòng lặp For - int jj; - for (jj=0; jj < 4; jj++) - { - NSLog(@"%d,", jj); - } // => in ra "0," - // "1," - // "2," - // "3," - - // Câu lệnh Foreach - NSArray *values = @[@0, @1, @2, @3]; - for (NSNumber *value in values) - { - NSLog(@"%@,", value); - } // => in ra "0," - // "1," - // "2," - // "3," - - // Câu lệnh Try-Catch-Finally - @try - { - // Your statements here - @throw [NSException exceptionWithName:@"FileNotFoundException" - reason:@"Không Tìm Thấy Tập Tin trên Hệ Thống" userInfo:nil]; - } @catch (NSException * e) - { - NSLog(@"Exception: %@", e); - } @finally - { - NSLog(@"Finally"); - } // => in ra "Exception: Không Tìm Thấy Tập Tin trên Hệ Thống" - // "Finally" - - /////////////////////////////////////// - // Đối Tượng (Objects) - /////////////////////////////////////// - - // Tạo một thực thể đối tượng bằng cách phân vùng nhớ và khởi tạo đối tượng đó. - // Một đối tượng sẽ không thật sự hoạt động cho đến khi cả 2 bước alloc] init] được hoàn thành - MyClass *myObject = [[MyClass alloc] init]; - - // Mô hình lập trình hướng đối tượng của Objective-C dựa trên việc truyền thông điệp (message) - // và các thực thể đối tượng với nhau. - // Trong Objective-C một đối tượng không đơn thuần gọi phương thức; nó truyền thông điệp. - [myObject instanceMethodWithParameter:@"Steve Jobs"]; - - // Dọn dẹp vùng nhớ mà bạn đã dùng ở chương trình - [pool drain]; - - // Kết thúc chương trình - return 0; -} - -/////////////////////////////////////// -// Lớp và Hàm (Classes & Functions) -/////////////////////////////////////// - -// Khai báo lớp của bạn ở một tập tin header (MyClass.h): -// Cú pháp Khai Báo Lớp: -// @interface ClassName : ParentClassName -// { -// Khai báo biến thành viên; -// } -// -/+ (type) Khai báo method; -// @end -@interface MyClass : NSObject -{ - int count; - id data; - NSString *name; -} -// Ký hiệu (notation) tiện ích để tự động khởi tạo public getter và setter -@property int count; -@property (copy) NSString *name; // Sao chép đối tượng trong quá trình gán. -@property (readonly) id data; // Chỉ khai báo phương thức getter. - -// Phương thức -+/- (return type)methodSignature:(Parameter Type *)parameterName; - -// dấu '+' cho phương thức lớp -+ (NSString *)classMethod; - -// dấu '-' cho phương thức thực thể -- (NSString *)instanceMethodWithParameter:(NSString *)string; -- (NSNumber *)methodAParameterAsString:(NSString*)string andAParameterAsNumber:(NSNumber *)number; - -@end - -// Thực thi các phương thức trong một tập tin thực thi (MyClass.m): - -@implementation MyClass - -// Gọi khi đối tượng được release -- (void)dealloc -{ -} - -// Phương thức khởi tạo (Constructors) là một cách để tạo các lớp -// Đây là phương thức khởi tạo mặc định được gọi khi đối tượng được khởi tạo -- (id)init -{ - if ((self = [super init])) - { - self.count = 1; - } - return self; -} - -+ (NSString *)classMethod -{ - return [[self alloc] init]; -} - -- (NSString *)instanceMethodWithParameter:(NSString *)string -{ - return @"New string"; -} - -- (NSNumber *)methodAParameterAsString:(NSString*)string andAParameterAsNumber:(NSNumber *)number -{ - return @42; -} - -// Các phương thức được khai báo vào MyProtocol -- (void)myProtocolMethod -{ - // câu lệnh -} - -@end - -/* - * Một protocol khai báo các phương thức mà có thể thực thi bởi bất kỳ lớp nào. - * Các protocol chính chúng không phải là các lớp. Chúng chỉ đơn giản là định ra giao diện (interface) - * mà các đối tượng khác có trách nhiệm sẽ thực thi. - */ -@protocol MyProtocol - - (void)myProtocolMethod; -@end - - - -``` -## Xem Thêm - -+ [Wikipedia Objective-C](http://en.wikipedia.org/wiki/Objective-C) - -+ Apple Docs': - + [Learning Objective-C](http://developer.apple.com/library/ios/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/) - - + [Programming With Objective-C](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html) - - + [Object-Oriented Programming with Objective-C](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/OOP_ObjC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005149) - - + [Coding Guidelines for Cocoa](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html) - -+ [iOS For High School Students: Getting Started](http://www.raywenderlich.com/5600/ios-for-high-school-students-getting-started) +--- +language: Objective-C +contributors: + - ["Eugene Yagrushkin", "www.about.me/yagrushkin"] + - ["Yannick Loriot", "https://github.com/YannickL"] +lang: vi-vn +filename: LearnObjectiveC-vi.m +--- + +Objective-C là ngôn ngữ lập trình chính được sử dụng bởi Apple cho các hệ điều hành macOS, iOS và các framework tương ứng của họ, Cocoa và Cocoa Touch. +Nó là một ngôn ngữ lập trình mục đích tổng quát, hướng đối tượng có bổ sung thêm kiểu truyền thông điệp giống Smalltalk vào ngôn ngữ lập trình C. + +```objective-c +// Chú thích dòng đơn bắt đầu với // + +/* +Chú thích đa dòng trông như thế này. +*/ + +// Nhập các headers của framework Foundation với cú pháp #import +#import +#import "MyClass.h" + +// Đầu vào chương trình của bạn là một hàm gọi là +// main với một kiểu trả về kiểu integer. +int main (int argc, const char * argv[]) +{ + // Tạo một autorelease pool để quản lý bộ nhớ vào chương trình + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + // Sử dụng hàm NSLog() để in ra các dòng lệnh vào console + NSLog(@"Hello World!"); // Print the string "Hello World!" + + /////////////////////////////////////// + // Kiểu & Biến (Types & Variables) + /////////////////////////////////////// + + // Khai báo số nguyên + int myPrimitive1 = 1; + long myPrimitive2 = 234554664565; + + // Khai báo đối tượng + // Đặt dấu nháy * vào trước tên biến cho khai báo đối tượng strong + MyClass *myObject1 = nil; // Strong + id myObject2 = nil; // Weak + // %@ là một đối tượng + // 'miêu tả' ('desciption') là thông lệ để trình bày giá trị của các Đối tượng + NSLog(@"%@ và %@", myObject1, [myObject2 description]); // In ra "(null) và (null)" + + // Chuỗi + NSString *worldString = @"World"; + NSLog(@"Hello %@!", worldString); // In ra "Hello World!" + + // Ký tự literals + NSNumber *theLetterZNumber = @'Z'; + char theLetterZ = [theLetterZNumber charValue]; + NSLog(@"%c", theLetterZ); + + // Số nguyên literals + NSNumber *fortyTwoNumber = @42; + int fortyTwo = [fortyTwoNumber intValue]; + NSLog(@"%i", fortyTwo); + + NSNumber *fortyTwoUnsignedNumber = @42U; + unsigned int fortyTwoUnsigned = [fortyTwoUnsignedNumber unsignedIntValue]; + NSLog(@"%u", fortyTwoUnsigned); + + NSNumber *fortyTwoShortNumber = [NSNumber numberWithShort:42]; + short fortyTwoShort = [fortyTwoShortNumber shortValue]; + NSLog(@"%hi", fortyTwoShort); + + NSNumber *fortyTwoLongNumber = @42L; + long fortyTwoLong = [fortyTwoLongNumber longValue]; + NSLog(@"%li", fortyTwoLong); + + // Dấu phẩy động (floating point) literals + NSNumber *piFloatNumber = @3.141592654F; + float piFloat = [piFloatNumber floatValue]; + NSLog(@"%f", piFloat); + + NSNumber *piDoubleNumber = @3.1415926535; + double piDouble = [piDoubleNumber doubleValue]; + NSLog(@"%f", piDouble); + + // BOOL literals + NSNumber *yesNumber = @YES; + NSNumber *noNumber = @NO; + + // Đối tượng Mảng + NSArray *anArray = @[@1, @2, @3, @4]; + NSNumber *thirdNumber = anArray[2]; + NSLog(@"Third number = %@", thirdNumber); // In ra "Third number = 3" + + // Đối tượng Từ điển + NSDictionary *aDictionary = @{ @"key1" : @"value1", @"key2" : @"value2" }; + NSObject *valueObject = aDictionary[@"A Key"]; + NSLog(@"Đối tượng = %@", valueObject); // In ra "Object = (null)" + + /////////////////////////////////////// + // Toán Tử (Operators) + /////////////////////////////////////// + + // Các toán tử cũng hoạt động giống như ngôn ngữ C + // Ví dụ: + 2 + 5; // => 7 + 4.2f + 5.1f; // => 9.3f + 3 == 2; // => 0 (NO) + 3 != 2; // => 1 (YES) + 1 && 1; // => 1 (Logical and) + 0 || 1; // => 1 (Logical or) + ~0x0F; // => 0xF0 (bitwise negation) + 0x0F & 0xF0; // => 0x00 (bitwise AND) + 0x01 << 1; // => 0x02 (bitwise dịch trái (bởi 1)) + + ///////////////////////////////////////////// + // Cấu Trúc Điều Khiển (Controls Structures) + ///////////////////////////////////////////// + + // Câu lệnh If-Else + if (NO) + { + NSLog(@"I am never run"); + } else if (0) + { + NSLog(@"I am also never run"); + } else + { + NSLog(@"I print"); + } + + // Câu lệnh Switch + switch (2) + { + case 0: + { + NSLog(@"I am never run"); + } break; + case 1: + { + NSLog(@"I am also never run"); + } break; + default: + { + NSLog(@"I print"); + } break; + } + + // Câu lệnh vòng lặp While + int ii = 0; + while (ii < 4) + { + NSLog(@"%d,", ii++); // ii++ tăng dần, sau khi sử dụng giá trị của nó. + } // => in ra "0," + // "1," + // "2," + // "3," + + // Câu lệnh vòng lặp For + int jj; + for (jj=0; jj < 4; jj++) + { + NSLog(@"%d,", jj); + } // => in ra "0," + // "1," + // "2," + // "3," + + // Câu lệnh Foreach + NSArray *values = @[@0, @1, @2, @3]; + for (NSNumber *value in values) + { + NSLog(@"%@,", value); + } // => in ra "0," + // "1," + // "2," + // "3," + + // Câu lệnh Try-Catch-Finally + @try + { + // Your statements here + @throw [NSException exceptionWithName:@"FileNotFoundException" + reason:@"Không Tìm Thấy Tập Tin trên Hệ Thống" userInfo:nil]; + } @catch (NSException * e) + { + NSLog(@"Exception: %@", e); + } @finally + { + NSLog(@"Finally"); + } // => in ra "Exception: Không Tìm Thấy Tập Tin trên Hệ Thống" + // "Finally" + + /////////////////////////////////////// + // Đối Tượng (Objects) + /////////////////////////////////////// + + // Tạo một thực thể đối tượng bằng cách phân vùng nhớ và khởi tạo đối tượng đó. + // Một đối tượng sẽ không thật sự hoạt động cho đến khi cả 2 bước alloc] init] được hoàn thành + MyClass *myObject = [[MyClass alloc] init]; + + // Mô hình lập trình hướng đối tượng của Objective-C dựa trên việc truyền thông điệp (message) + // và các thực thể đối tượng với nhau. + // Trong Objective-C một đối tượng không đơn thuần gọi phương thức; nó truyền thông điệp. + [myObject instanceMethodWithParameter:@"Steve Jobs"]; + + // Dọn dẹp vùng nhớ mà bạn đã dùng ở chương trình + [pool drain]; + + // Kết thúc chương trình + return 0; +} + +/////////////////////////////////////// +// Lớp và Hàm (Classes & Functions) +/////////////////////////////////////// + +// Khai báo lớp của bạn ở một tập tin header (MyClass.h): +// Cú pháp Khai Báo Lớp: +// @interface ClassName : ParentClassName +// { +// Khai báo biến thành viên; +// } +// -/+ (type) Khai báo method; +// @end +@interface MyClass : NSObject +{ + int count; + id data; + NSString *name; +} +// Ký hiệu (notation) tiện ích để tự động khởi tạo public getter và setter +@property int count; +@property (copy) NSString *name; // Sao chép đối tượng trong quá trình gán. +@property (readonly) id data; // Chỉ khai báo phương thức getter. + +// Phương thức ++/- (return type)methodSignature:(Parameter Type *)parameterName; + +// dấu '+' cho phương thức lớp ++ (NSString *)classMethod; + +// dấu '-' cho phương thức thực thể +- (NSString *)instanceMethodWithParameter:(NSString *)string; +- (NSNumber *)methodAParameterAsString:(NSString*)string andAParameterAsNumber:(NSNumber *)number; + +@end + +// Thực thi các phương thức trong một tập tin thực thi (MyClass.m): + +@implementation MyClass + +// Gọi khi đối tượng được release +- (void)dealloc +{ +} + +// Phương thức khởi tạo (Constructors) là một cách để tạo các lớp +// Đây là phương thức khởi tạo mặc định được gọi khi đối tượng được khởi tạo +- (id)init +{ + if ((self = [super init])) + { + self.count = 1; + } + return self; +} + ++ (NSString *)classMethod +{ + return [[self alloc] init]; +} + +- (NSString *)instanceMethodWithParameter:(NSString *)string +{ + return @"New string"; +} + +- (NSNumber *)methodAParameterAsString:(NSString*)string andAParameterAsNumber:(NSNumber *)number +{ + return @42; +} + +// Các phương thức được khai báo vào MyProtocol +- (void)myProtocolMethod +{ + // câu lệnh +} + +@end + +/* + * Một protocol khai báo các phương thức mà có thể thực thi bởi bất kỳ lớp nào. + * Các protocol chính chúng không phải là các lớp. Chúng chỉ đơn giản là định ra giao diện (interface) + * mà các đối tượng khác có trách nhiệm sẽ thực thi. + */ +@protocol MyProtocol + - (void)myProtocolMethod; +@end + + + +``` +## Xem Thêm + ++ [Wikipedia Objective-C](http://en.wikipedia.org/wiki/Objective-C) + ++ Apple Docs': + + [Learning Objective-C](http://developer.apple.com/library/ios/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/) + + + [Programming With Objective-C](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html) + + + [Object-Oriented Programming with Objective-C](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/OOP_ObjC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005149) + + + [Coding Guidelines for Cocoa](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html) + ++ [iOS For High School Students: Getting Started](http://www.raywenderlich.com/5600/ios-for-high-school-students-getting-started) -- cgit v1.2.3