我有一个带有名为mod /的子目录的存储库。我希望将此子目录与其中的README文件一起包含在存储库中,但我不希望在mod /中包含其他子目录。我已经尝试使用.gitignore并提交更改来提出here的一些修补程序,但是 import React from 'react';
import {
ActivityIndicator,
AsyncStorage,
Button,
StatusBar,
StyleSheet,
View,
} from 'react-native';
import { StackNavigator, SwitchNavigator } from 'react-navigation'; // Version can be specified in package.json
class SignInScreen extends React.Component {
static navigationOptions = {
title: 'Please sign in',
};
render() {
return (
<View style={styles.container}>
<Button title="Sign in!" onPress={this._signInAsync} />
</View>
);
}
_signInAsync = async () => {
await AsyncStorage.setItem('userToken', 'abc');
this.props.navigation.navigate('App');
};
}
class HomeScreen extends React.Component {
static navigationOptions = {
title: 'Welcome to the app!',
};
render() {
return (
<View style={styles.container}>
<Button title="Show me more of the app" onPress={this._showMoreApp} />
<Button title="Actually, sign me out :)" onPress={this._signOutAsync} />
</View>
);
}
_showMoreApp = () => {
this.props.navigation.navigate('Other');
};
_signOutAsync = async () => {
await AsyncStorage.clear();
this.props.navigation.navigate('Auth');
};
}
class OtherScreen extends React.Component {
static navigationOptions = {
title: 'Lots of features here',
};
render() {
return (
<View style={styles.container}>
<Button title="I'm done, sign me out" onPress={this._signOutAsync} />
<StatusBar barStyle="default" />
</View>
);
}
_signOutAsync = async () => {
await AsyncStorage.clear();
this.props.navigation.navigate('Auth');
};
}
class AuthLoadingScreen extends React.Component {
constructor() {
super();
this._bootstrapAsync();
}
// Fetch the token from storage then navigate to our appropriate place
_bootstrapAsync = async () => {
const userToken = await AsyncStorage.getItem('userToken');
// This will switch to the App screen or Auth screen and this loading
// screen will be unmounted and thrown away.
this.props.navigation.navigate(userToken ? 'App' : 'Auth');
};
// Render any loading content that you like here
render() {
return (
<View style={styles.container}>
<ActivityIndicator />
<StatusBar barStyle="default" />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
});
const AppStack = StackNavigator({ Home: HomeScreen, Other: OtherScreen });
const AuthStack = StackNavigator({ SignIn: SignInScreen });
export default SwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
App: AppStack,
Auth: AuthStack,
},
{
initialRouteName: 'AuthLoading',
}`enter code here`
);
仍然显示mod /中的所有内容均已被跟踪。目前,我的.gitignore包含:
git status
但是我也尝试将第一行设置为:
mod/* # Ignore everything in 'mod'...
!mod/README.md # ... except this.
和其他一些变化...
要在每次编辑.gitignore时“应用”这些设置,请运行:
/mod
mod/
./mod
./mod/*
,状态继续显示mod /中未跟踪的文件。
答案 0 :(得分:2)
没有例外。只需忽略整个目录(使用mod/*
),然后
git add -f mod/README.md
git commit
-f
告诉git覆盖此文件的忽略。它将继续被git跟踪,而忽略其他所有内容。
之所以可行,是因为.gitignore
仅确定git如何处理未跟踪的文件。如果您强制git使用-f
来跟踪文件,则该文件位于忽略文件中的事实是无关紧要的。
答案 1 :(得分:2)
我可以想到三个直观的选择:
向.gitignore
添加一个单独的mod
:
*
!README.md
使用您的根级别.gitignore
,并且每行仅 个规则或注释,但不能同时使用这两个级别:
./mod/*
!./mod/README.md
我在这里使用./
前缀来强调,但这不是严格必要的。由于这些路径都包含一个非结尾的斜杠,因此无论如何它们都将相对于.gitignore
的目录进行解释。
对于肯定的规则不要使用.gitignore
:忽略mod
,然后这样做
git add -f mod/README.md
Git继续跟踪使用-f/--force
标志添加的任何文件。