原本是要講出題
但後來好像要來講點 Git 協作技巧
一三學術長
AaW
反正比溫室羊出完題目時間快
開始時間: 7/21 14:23
弄完出題: 7/23 11:27
弄完全部: 7/24 13:52
三個可能的時間點
我們有在資訊社團裡面不錯的資源
aka ISCOJ
但現在上面很多爛題目就是了
Codeforces (有一個大群一五都不給你們加現在加一下 連結)
非必要的
必要
示範:用 jngen 生一顆樹
看 tree.md
#include <jngen.h>
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main(int argc, char *argv[]) {
registerGen(argc, argv);
parseArgs(argc, argv);
ll n = rnd.next(2, std::atoi(argv[1]));
vector<ll> arr(n);
ll maxk = 0;
for (int i = 0; i < n; ++i) {
arr[i] = rnd.next(1ll, (ll)std::atoi(argv[2]));
maxk += arr[i];
}
ll k = rnd.next(1ll, maxk);
cout << n << " " << k << endl;
for (auto &i : arr) cout << i << " \n"[&i == &arr.back()];
}
g++ gen.cpp -o gen
g++ ans.cpp -o ans
for i in {01..20}; do
./gen > $i.in
./ans < $i.in > $i.out
done
所有的 Task
建立新的題目(Task)
注意事項:測資上傳時,請補齊名稱長度
例如用 01.in 而不是 1.in
這樣順序才是對的,不然他會按照字典序排
禮拜一只講了 git 指令的用法,但並沒有教你們在專案開發時,遇到一些常見的情境,要怎麼處理
Tip:如果可以用圖形化介面來更容易上手,就可以不要用 Cli
懶得做簡報,直接帶畫面
一個輕量且直觀的工作流程
master:
主分支始終保持可佈署,並且代表程式碼的最新穩定版本。
feature:
每當需要新增功能或修復缺陷時,開發人員就為該改動建立一個功能分支。這些分支會與主分支隔離,直到準備好進行審查。
Pull Request:
功能分支上的工作完成後,開發人員發起拉取請求,以便開始程式碼審查與討論。
Continuous Deployment:
一旦拉取請求獲得批准,變更就會合併到主分支,並自動部署到生產環境。
主分支(master)
主分支僅用於正式發佈,始終保持可佈署。所有經過測試且打好版本標籤(tag)的釋出,都由此分支管理。
開發分支(develop)
所有完成 code review 並準備整合的新功能,先合併到 develop 分支。這是下一個釋出的集成分支,僅用於開發期間的自動化測試與驗證。
功能分支(feature/*)
每個新功能或需求對應一個 feature 分支,從 develop 分出,開發完成後再合併回 develop。這些分支避免直接影響主線,直到功能成熟。
預備發佈分支(release/*)
當 develop 上的功能達到下一個版本標準,就從 develop 切出一個 release 分支。在此分支上只做測試相關修正和文檔更新,完成後同時合併到 master(打 tag)與 develop。
緊急修復分支(hotfix/*)
線上若出現重大問題,直接從 master 切出 hotfix 分支修復。修好後,合併到 master(並打 tag)以及 develop,確保修補也在下一個版本中包含。
<<<<<<< Current Change
你在的 Branch 的 Commit
=======
Merge 進來的 Branch 的 Commit
>>>>>>>
直接進行編輯,留下最後的版本就好
編輯完之後呢?
先 git add
再 git merge --continue 或是 git rebase --continue
Rebase 特色:可以創造線性 History、可以避免線圖太多分岔過於混亂
缺點: Rebase 完會需要 force push,蓋掉一些 commit ,並且讓其他人的亂掉
以下為個人看法,參考就好,沒有標準做法
None
Why?
branchA
origin/branchA
branchA
origin/branchA
branchA
origin/branchA
branchA
origin/branchA
直接 git pull
情況 A:
直接 git pull
情況 B:
直接 git pull --rebase
branchA
origin/branchA
branchA
origin/branchA
實際上會經過一次 git merge
如果遠端有 Commit,一定要先 Pull,而且最好是用 rebase Pull
如果在本地進行大規模改寫紀錄,例如 Rebase 之類的,要 force push
盡量不要 force push!
我不會
反正講的東西比簡報重要
簡報亂做就好👍