[英]What's the best practice for handling system-specific information under version control?
[英]What's the best practice for .o file or build version control?
我有一個C項目源代碼(在這種情況下為Linux內核)和Makefile。
我發現這很痛苦,因為我進行了修改,並且切換了多個分支,然后忘記了這些對象文件與哪個提交有關。
我可以在構建過程中自動進行版本控制嗎?
例如(我認為這可能是一個很好的工作流程,也許很愚蠢):
逼我確保git的工作spcace之前是干凈的make
自動保留版本的版本。 將一個內部版本與目標文件和源文件相關聯。
我可以簽出任何版本
我可以知道哪些.o
文件是最新的(與源代碼工作空間相比)。 像git status
但最重要的是,源代碼git tree不會受到干擾。
常見的解決方案是將信息嵌入人工制品以進行識別。
例如,如果您有許多控制編譯器的-D parameter=value
設置,請將它們放入字符串中。
const volatile static char build[] = "parameter PARAMETER has value " PARAMETER;
然后,您可以擁有將這個字符串返回給調用者的代碼,或者您可以僅檢查strings
或less
strings
的二進制文件,以查看嵌入其中的信息。
有關更多信息,請參見gcc是否有任何選項可在ELF二進制文件中添加版本信息?
由於.o
文件是C編譯器生成的目標文件(C項目的輸出文件), 因此無需在git repo中對.o
文件進行版本控制 。
您只需要在git repo中管理源代碼(例如C項目和Makefile)。
對於輸出文件,您應該在.gitignore
忽略它們:
touch .gitignore
echo **/*.o >> .gitignore
git add .
git rm **/*.o --cached
git add .
git commit -m 'ignore .o files'
git push
關於目標文件的最佳實踐是git-ignore它們:
echo *.o >> .gitignore
關於使用分支的構建過程的最佳實踐是為不同的分支具有單獨的長期運行的工作樹:
git clone -b branch1 master-repo project-b1
git clone -b branch2 master-repo project-b2
cd project-b1
make
cd ../project-b2
make
並且不要在這些工作樹中切換分支。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.