我使用
cargo new
创建了一个“hello world”Rust 应用程序。当我执行 git status
时,它显示了一堆文件:
A rust/welcomec/Cargo.lock
A rust/welcomec/Cargo.toml
A rust/welcomec/src/main.rs
A rust/welcomec/target/debug/.cargo-lock
A rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/bin-welcome-2d68725c8fae6fd1
A rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/bin-welcome-2d68725c8fae6fd1.json
A rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/dep-bin-welcome-2d68725c8fae6fd1
A rust/welcomec/target/debug/deps/welcome-2d68725c8fae6fd1
A rust/welcomec/target/debug/welcome
A rust/welcomec/target/debug/welcome.d
我可以安全地忽略这些文件和/或目录吗?
.gitignore
用于可执行包# Generated files
/target/
.gitignore
用于图书馆箱子# Generated files
/target/
# Well, this depends... See below!
Cargo.lock
您始终可以完全忽略
target/
文件夹。它仅包含生成的文件(例如编译工件),并且通常也很大。
如果您正在开发一个可执行程序,那么就已经完成了!只需一个条目。
对于图书馆项目,您可能还想忽略
Cargo.lock
。但这有点微妙。官方对此事的立场最近发生了变化。 Cargo.lock
支持可重现的构建,因为它记录了所有依赖项的确切版本。这非常有用。对于可执行文件,您绝对需要那些可重复的构建,因此上面的建议。
重要的是要了解,如果项目使用您的库,您的
Cargo.lock
将被忽略! Cargo 只关心依赖关系的Cargo.toml
。因此,Cargo.lock
是否在您的存储库中基本上只与您的库开发相关。
一方面,您应该始终使用所有依赖项的最新版本来测试您的库。这是反对
Cargo.lock
的论据。
另一方面,
Cargo.lock
为您提供与其他项目相同的好处:可重复的构建意味着稳定的 CI,更容易平分,yada yada。
最终,你决定。但请放心:你不可能真的把事情搞砸。无论哪种方式通常都可以。
您可以从 GitHub 的 gitignore for Rust 中获取一些灵感。在撰写本文时,文件如下:
# Generated by Cargo
# will have compiled files and executables
debug/
target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb